Android分裂字符串与正则表达式无法正常工作

时间:2012-11-18 15:23:53

标签: java android regex

我正试图在每个“。”处拆分一个字符串。要么 ”?”我使用这个正则表达式:

(?<=(?!.[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。使用(?&lt; = [?.])是有效的,所以问题必须在(?!。[0-9])部分,这意味着要排除后跟数字的点。

3 个答案:

答案 0 :(得分:4)

使用正则表达式

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

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

答案 1 :(得分:2)

请记住,在方括号字符类之外,正则表达式中的.表示任何单个字符。您需要\.来匹配文字点,这反过来意味着您需要字符串文字中的\\.

答案 2 :(得分: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