这是我正在使用的代码:
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);
}
}
}
完美编译,但在运行时没有任何反应。我做错了什么?
答案 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)
答案 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,而不是数组