2012-11-18 106 views
1

我想在每個「。」分裂一個字符串。要麼 」?」我用這個正則表達式:Android拆分字符串與正則表達式不工作

(?<=(?!.[0-9])[?.]) 

理論上的代碼還可以防止劈裂如果點後跟一個數字所以像3.000不會分裂,它也包括在新的字符串的位置。

例如,如果我有這樣的文字:「你好。你最喜歡的號碼是什麼?它是3.560。」我想得到:「你好。」,「你最喜歡的號碼是什麼?」,「它是3.560」。

我做了一個簡單的Java程序在我的電腦上,它的工作原理完全一樣我想:

String[] x = c.split("(?<=(?!.[0-9])[?.])"); 
for(String v : x){ 
    System.out.println(v); 
} 

然而,當我在我的Android應用程序使用相同的正則表達式不拆什麼...

x = txt.split("(?<=(?!.[0-9])[?.])"); 
//This, in my android app, returns an array with only one entry which is the whole string without splitting. 

PS。使用(?< = [?.])可以工作,所以問題必須在(?!。[0-9])部分,這意味着排除後跟數字的點。

+0

什麼是你的字符串? –

+0

在應用程序中,用戶輸入字符串,但我一直在嘗試使用本文中的文本:http://reviews.cnet.com/8301-19736_7-57550564-251/samsung-galaxy-s3-to-get- multiview-smart-rotation/ – JoeyCK

回答

4

使用正則表達式

(?:(?<=[.])(?![0-9])|(?<=[?])) 

str.split("(?:(?<=[.])(?![0-9])|(?<=[?]))"); 
+0

哇!感謝這個工作!你能告訴我爲什麼我的不工作? – JoeyCK

+0

@JouiCK - (1)你的負面看法不應該有一段時間; (2)不應該對'?'應用負面預測; (3)應該有前瞻性的向後看(推薦) –

2

請記住,方括號外的字符類,.中的正則表達式意味着任意單個字符。您需要\.來匹配文字點,這意味着您需要字符串文字中的\\.

+0

是這樣的? (?<=(?!\\。[0-9])[?\\。]) – JoeyCK

+0

它在Android上不起作用,但它在我的計算機上的java程序中起作用。 – JoeyCK

+1

是的,嚴格來說,你不需要'[?。]'裏面的\\,但我認爲它沒有任何傷害。 –

1

試試這個。

public class Tester { 

    public static void main(String[] args){ 
     String regex = "[?.][^\\d]"; 
     String tester = "Testing 3.015 dsd . sd ? sds"; 
     String[] arr = tester.split(regex); 
     for (String s : arr){ 
      System.out.println(s); 
     } 
    } 

} 

輸出:

Testing 3.015 dsd 
sd 
sds 
+0

這一個似乎工作,但它不會返回「。」最終像歐米茄的那樣。不管怎樣,謝謝你! :) – JoeyCK

+0

最後一個很容易追加。 –

相關問題