Java 在拆分文本时遇到问题
以下是我使用的代码:Java 在拆分文本时遇到问题,java,split,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); } } } 编
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);
}
}
}
编译非常完美,但在运行时不会发生任何事情。我做错了什么?试试看
String [] result = x.split("\\.");
拆分接受一个字符,而不是要拆分的字符。“.”在模式中被特殊处理。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
如果不想使用正则表达式,可以使用guava lib的拆分器 此外,结果是一个Iterable,而不是采用正则表达式模式的数组。恰好正则表达式中的
是一个元字符,它(几乎)匹配任何字符,因此拆分(“.”
的工作方式与您期望的不一样
您可以通过在
前面加反斜杠来转义它。作为Java字符串文本,这是“\\。”
。由于\
本身是一个Java转义字符,因此\
的长度加倍“\\”
是长度为2的字符串,包含反斜杠和句点
如果给你一个任意的字符串
,你可以使用。它将创建一个模式,使其与给定的字符串
完全匹配
另见
这仅用于教育目的:
String text =
"Wait a minute... what?!? Oh yeah! This is awesome!!";
for (String part : text.split("(?<=[.?!]) ")) {
System.out.println(part);
}
工具书类
相关问题
“编译非常完美,但在运行时不会发生任何事情。”-这可能会让你心碎,但仅仅因为它可以编译,并不意味着它可以工作。哦,不。。请告诉我你在开玩笑电脑(几乎)总是完全按照你告诉他的去做。。。不一定是你想要他做的…“\\”是一个长度为2的字符串,包含一个反斜杠和一个句点。“嗯..”。。我不明白。有人能重新解释吗?@MoonStruckHorrors:AString s=“\n”代码>包含一个字符,换行符<代码>“\t”
包含一个选项卡<代码>“\\”
包含反斜杠<代码>“\”包含双引号。这称为转义序列。因此,由于“\\”
包含反斜杠,“\\。”
包含反斜杠和句点。您可以打印出来并检查其长度()
确认。另请参见。但这不意味着它将在\
处拆分字符串,而不是
?@moonstroked:regular expression模式\.
匹配一个文本句点。正则表达式模式
匹配(几乎)任何字符。因此模式a.b
匹配之类的字符串axb“
,”a!b“
等。模式a\.b
仅与“a.b”
匹配。
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!!