我需要使用分隔符". "
拆分文本。例如,我想要这个字符串:
Washington is the U.S Capital. Barack is living there.
分为两部分:
Washington is the U.S Capital.
Barack is living there.
这是我的代码:
// Initialize the tokenizer
StringTokenizer tokenizer = new StringTokenizer("Washington is the U.S Capital. Barack is living there.", ". ");
while (tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
不幸的是输出结果:
Washington
is
the
U
S
Capital
Barack
is
living
there
有人可以解释发生了什么吗?
答案 0 :(得分:29)
不要使用StringTokenizer
;这是一个遗产类。请改用java.util.Scanner
或简称String.split
。
String text = "Washington is the U.S Capital. Barack is living there.";
String[] tokens = text.split("\\. ");
for (String token : tokens) {
System.out.println("[" + token + "]");
}
打印:
[Washington is the U.S Capital]
[Barack is living there.]
请注意,split
和Scanner
是基于“正则表达式”的(正则表达式),并且由于.
是一个特殊的正则表达式“元字符”,因此需要将其转义为\
。反过来,由于\
本身是Java字符串文字的转义字符,因此您需要将"\\. "
写为分隔符。
这可能听起来很复杂,但事实并非如此。 split
和Scanner
远远优于StringTokenizer
,正则表达并不难以接受。
java.util.StringTokenizer
StringTokenizer
是一个遗留类,出于兼容性原因而保留,但在新代码中不鼓励使用它。建议所有寻求此功能的人使用split
方法String
或java.util.regex
包。java.util.Scanner
String[] String.split
问题是StringTokenizer
将分隔符字符串中的每个字符作为单独的分隔符,即 NOT 整个String
本身。
来自API:
StringTokenizer(String str, String delim)
:为指定的字符串构造一个字符串标记生成器。delim
参数中的字符是分隔标记的分隔符。分隔符字符本身不会被视为标记。
答案 1 :(得分:1)
你的StringTokenizer构造函数采用分隔符“。”,它将点或空格作为分隔符。
答案 2 :(得分:0)
尝试在分隔符中的点后删除空格。请改用它。
StringTokenizer tokenizer = new StringTokenizer("Washington is the U.S Capital. Barack is living there.", ".");
答案 3 :(得分:0)
StringTokenizer(String str,String delim,boolean returnValue):使用指定的字符串,分隔符和returnValue创建StringTokenizer。
如果返回值为true,则分隔符字符被视为标记。如果为false,则分隔符用于分隔标记。