拆分文本时遇到问题

时间:2010-07-16 13:12:03

标签: java split

这是我正在使用的代码:

public class splitText {
public static void main(String[] args) {
    String x = "I lost my Phone. I shouldn't drive home alone";
    String[] result = x.split(".");
    for (String i : result) {
        System.out.println(i);
    }
}
}

完美编译,但在运行时没有任何反应。我做错了什么?

4 个答案:

答案 0 :(得分:7)

String.split(String regex)采用正则表达式模式。恰好相反,正则表达式中的.是一个符合(几乎)任何字符的元字符,因此split(".")不能按预期方式工作。

您可以通过在反斜杠前加上.来转义它。作为Java字符串文字,这是"\\."\加倍,因为\本身是Java转义字符。 "\\."是长度为2的String,包含反斜杠和句点。

如果你给了一个任意String字面上的匹配(或者如果你不想自己逃避它们),你可以使用Pattern.quote。它会创建一个与给定String字面匹配的模式。

另见


这仅用于教育目的:

    String text =
        "Wait a minute... what?!? Oh yeah! This is awesome!!";

    for (String part : text.split("(?<=[.?!]) ")) {
        System.out.println(part);
    }

打印:

Wait a minute...
what?!?
Oh yeah!
This is awesome!!

参考

相关问题

答案 1 :(得分:5)

String.split使用正则表达式,因此点(。)表示“任何东西”。 你需要逃避点

public static void main(String[] args) {
    String x = "I lost my Phone. I shouldn't drive home alone";
    String[] result = x.split("\\.");
    for (String i : result) {
        System.out.println(i.trim());
    }
}

给出:

I lost my Phone
I shouldn't drive home alone

答案 2 :(得分:3)

尝试

String [] result = x.split("\\.");

拆分需要pattern,而不是要拆分的字符。 “。”在模式中被特殊对待。

答案 3 :(得分:3)

如果您不想使用正则表达式,可以使用guava lib的Splitter

http://guava-libraries.googlecode.com/svn/trunk/javadoc/index.html

 String x = "I lost my Phone. I shouldn't drive home alone";
 Splitter.on('.').trimResults().split(x)

此外,结果是Iterable,而不是数组