1
public static void main(String[] args){
    String testStr = "Test test. Test 2. Test3?";
    String[] newStr = testStr.split(".?");
    System.out.print(newStr[0]);
}

我得到一个 Array Index Out of Bounds 异常运行这个,newStr 的长度是 0。我想把句子分解成“。”上的标记。和 ”?”。我犯了什么错误?

4

3 回答 3

4

您必须转义这些字符。使用"\\.""\\?"。这是因为String#split接收到一个正则表达式,而这两个字符都是正则表达式中的特殊字符。

于 2012-10-17T06:09:23.667 回答
4

你需要逃脱.?。利用 :

String[] newStr = testStr.split("\\.|\\?");
于 2012-10-17T06:09:59.080 回答
4

String#split将正则表达式作为参数进行拆分。.并且?在正则表达式中有特殊含义。

您可以使用字符类来拆分它们中的任何一个:

testStr.split("[.?]");

在字符类中,您不需要转义它们,因为特殊字符在字符类中失去了意义。

如果将其与普通管道一起使用|,则需要对其进行转义:-

testStr.split("\\.|\\?");

更新: - 如果你想保留你的分隔符:

testStr.split("(?<=[.?])")
于 2012-10-17T06:09:59.517 回答