2013-11-24 10 views
0

我正在研究在Java中使用正則表達式,並在this link上發現了一些有趣的東西。它說Java中的正則表達式可以分割特殊字符和字母數字

[:punct:] Punctuation symbols . , " ' ? ! ; : # $ % & () * + -/< > = @ [ ] \^_ { } | ~ 

是用來分解特殊字符。是否有類似的東西在Java中,讓說,我有一個變量:

String sample = "I have $100"; 

有反正我可以打破變量:我有$ 100爲

I 
have 
$ 
100 
+0

只有'$'是你想分開的字符嗎? (我問,如果這是真的,那麼我沒有看到任何理由提及'punct'類)。它也總是在一定數量的開始,或者它也可以像'123 $'一樣放在末尾? – Pshemo

+0

嗨@Pshemo,它可以是英鎊或美元,這就是爲什麼我尋找可以分割所有這些符號的正則表達式參數 – user3003233

回答

0

嘗試,環視正則表達式,

String sample = "£9999"; 
    String[] arr = sample.split("(?<=[$£])|(?=)"); 
    for (String string : arr) { 
    System.out.println(string); 
    } 

輸出:

£ 
9999 
+0

您需要擺脫反斜槓。你用它來逃避美元符號,但是現在你已經回到使用角色類別,並且不正確地轉義左括號。另外,爲什麼你在第二個分支中使用這個lookahead?它與空間相匹配而不消耗它,但是你希望消耗它。 –

+0

@AlanMoore,你說得對。我已經更新了我的答案。 – Masudul

+0

@Masud,爲什麼會顯示 null $ 我不明白? – user3003233

1

你可以得到你所要求的與下面的Java代碼輸出,

Pattern pattern = Pattern.compile("(\\$)|(\\w+)");/*(\\w*)"); changed to \\w+ to avoid empty matches, based on AlanMoore's remark*/ 
      Matcher matcher = pattern.matcher("I have $100"); 
      while(matcher.find()){ 
//    if(matcher.group().isEmpty())continue; 

       System.out.println(matcher.group()); 
      } 
+1

+1替代方法。人們總是認爲OP使用'split()'鎖定了,在很多情況下,這只是他們第一個想到的事情,他們不知道還有另一種 - 通常更容易 - 去實現它。但是你應該使用'(\\ w +)'而不是'(\\ w *)';那麼你就不必這樣做了'isEmpty()'測試。 –

+0

@AlanMoore謝謝你是絕對正確的,我會更新答案。 – melc

2

既然要拆分只在£$我建議把它們放在自己的性格類[£$],而不是使用預定義一個包含很多可能不應該分裂的字符。因此,嘗試像split("\\s|(?<=[£$])")將各執

  • \\s - 每一個空白
  • (?<=[£$]) - 這已收到£$$|100每一個地方(|表示這樣的地方)。這裏使用的機制被稱爲look-behind

演示

for (String s : "I have $100 and £200".split("\\s|(?<=[£$])")) 
    System.out.println(">" + s); 

輸出:

>I 
>have 
>$ 
>100 
>and 
>£ 
>200 
+0

+1看起來不錯:) – Bohemian

0

這個任務很簡單的正則表達式是\b,其中一個單詞邊界匹配。分割後,您需要修剪結果並過濾掉空字符串,然後獲得所需內容。

相關問題