Jump to content
razvandragos29

java split method

Recommended Posts

Salut incerc sa fac split la un string folosind mai multi delimitatori. Stringul este urmatorul

 String s = "  (MM + X + C - L) * (IX - I) ";

.Prima oara am eliminat spatiile albe cu ajutorul lui replaceAll si dupa am apelat la metoda split folosind linia urmatoare

 String[] split = s.split("\\+|\\)|\\-|\\(|\\*|\\s");

Insa am o problema eu din stringu de mai sus vreau sa scot doar numerele romane MM , X, C etc. Insa in array split am si 3 spatii albe :( .

Acesta e tot codul

 public class Split {

public static void main(String args[]){

String s = " (MM + X + C - L) * (IX - I) ";
s= s.replaceAll("\\s","");
System.out.println(s);
String[] split = s.split("\\+|\\)|\\-|\\(|\\*|\\s");


for(int i = 0; i < split.length ; i++){
System.out.println(split[i]);
}


}
}

Am nevoie de numerele romane din expresie deoarece trebuie sa le convertesc in numere arabe dupa pe fiecare in parte.

Link to comment
Share on other sites

Nu am programat in Java pana acum dar din cate vad eu aici este o problema de regular expressions. La care ai urmatoarele optiuni:

String[] split = s.split("[\\+|\\)|\\-|\\(|\\*|\\s]+");

Sau

String[] split = s.split("[^a-zA-Z]+");

Daca observi ambele contin un set de caractere [...] Primul se aplica la oricare delimitator specificat de tine inclusiv spatiul. Urmatorul se aplica la oricare caracter ce nu este alfabetic.

Ce trebuie sa observi tu in ambele este cuantificatorul '+' ce urmeaza dupa setul de carcatere. Acel plus face ca setul de caractere la care se aplica sa apara de 1 sau mai multe ori. De ce este asta important?

Sa observam textul tau:

(MM+X+C-L)*(IX-I)

Mai exact portiunea:

)*(

Aici sunt 3 caractere care satisfac criteriile cerute de setul tau. Si din moment ce setul tau (fara '+') se aplica doar la un caracter. Atunci fiecare caracter este considerat un delimitator si genereaza un text gol deoarece intre el si urmatorul caracter (care la randul sau satisface criteriile cerute de set) nu se afla nimic.

Adaugand '+' la sfarsitul setului face ca toate caracterele sa sa fie tratate precum un singur delimitator. Deoarece se potrivesc criteriului de 1 sau mai multe cerute de cuantificatorul '+'.

Partea buna este ca nici nu ai nevoie sa indepartezi spatiile:

s= s.replaceAll("\\s","");

Deoarece unul sau mai multe spatii este/sunt tratat(e) precum un singur delimitator.

P.S. Scuze pentru Romana mea de rahat. Sper sa poti intelege ce am spus :)

Edited by S.L.C
Link to comment
Share on other sites

Din ce am observat incerci sa faci un calculator pentru cifre romane.

Abordezi gresit problema utilizand split.

Cel mai bine transformi respectiva expresie in forma postfixata si dupa o rezolvi mult mai usor.

Cu split o sa te complici prea mult.

Edit: Ca sa scoti numerele romane parcurgi expresia, atunci cand intalnesti o litera incepi sa copiezi pana cand urmatorul caracter e diferit de litera. si tot asa.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...