【问题标题】:Having trouble with Splitting text拆分文本时遇到问题
【发布时间】:2010-11-05 16:43:26
【问题描述】:

这是我正在使用的代码:

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);
    }
}
}

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

【问题讨论】:

  • "编译完美,但运行时没有任何反应。" - 这可能会让你心碎,但仅仅因为它可以编译,并不意味着它可以工作。
  • Aww no.. 请告诉我你在开玩笑。 :P
  • 计算机(几乎)总是完全按照您告诉他做的事情...不一定是您希望他做的事情...

标签: java split


【解决方案1】:

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!!

参考文献

相关问题

【讨论】:

  • ""\\." 是一个长度为 2 的字符串,包含一个反斜杠和一个句点。"嗯..我没听懂。谁能重新解释一下?
  • @MoonStruckHorrors:String s = "\n"; 包含一个字符,即换行符。 "\t" 包含一个选项卡。 "\\" 包含反斜杠。 "\"" 包含双引号。这称为转义序列。因此,由于"\\" 包含反斜杠,"\\." 包含反斜杠和句点。您可以将其打印出来并检查其length() 以确认。另见stackoverflow.com/questions/3224337/doubt-about-java-char
  • 谢谢。但这是否意味着它将在\. 而不是. 处拆分字符串?
  • @MoonStruck:正则表达式模式\. 匹配文字句点。正则表达式模式. 匹配(几乎)任何字符。所以a.b 模式匹配"axb""a!b" 等字符串。a\.b 模式只匹配"a.b"
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    试试

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

    Split 接受pattern,而不是要拆分的字符。这 ”。”在模式中被特殊对待。

    【讨论】:

      【解决方案4】:

      如果不想使用regex,可以使用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,而不是一个数组

      【讨论】:

        猜你喜欢
        • 2019-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多