我有一个包含多个空格的字符串,但是当我使用标记生成器时,它会在所有这些空格中将它分开。我需要令牌来包含那些空格。我如何利用StringTokenizer返回带有我分裂的标记的值?
答案 0 :(得分:2)
您会在StringTokenizer
的文档中注明,建议不要将其用于任何新代码,String.split(regex)
就是您想要的
String foo = "this is some data in a string";
String[] bar = foo.split("\\s+");
编辑以添加:或者,如果您的需求大于简单拆分,则使用Pattern
和Matcher
类进行更复杂的正则表达式匹配和提取。
再次编辑:如果您想保留自己的空间,实际上了解正则表达式确实有帮助:
String[] bar = foo.split("\\b+");
这将分割为单词边界,将每个单词之间的空格保留为String
;
public static void main( String[] args )
{
String foo = "this is some data in a string";
String[] bar = foo.split("\\b");
for (String s : bar)
{
System.out.print(s);
if (s.matches("^\\s+$"))
{
System.out.println("\t<< " + s.length() + " spaces");
}
else
{
System.out.println();
}
}
}
输出:
this
<< 1 spaces
is
<< 6 spaces
some
<< 2 spaces
data
<< 6 spaces
in
<< 3 spaces
a
<< 1 spaces
string
答案 1 :(得分:1)
听起来您可能需要使用正则表达式(http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/package-summary.html)而不是StringTokenizer
。
答案 2 :(得分:1)
使用String.split("\\s+")
代替StringTokenizer
。
请注意,这只会提取由至少一个空白字符分隔的非空白字符,如果您希望包含在非空白字符中的前导/尾随空白字符将完全不同溶液!
您的原始问题并未明确此要求,并且有一个编辑待处理,试图澄清它。
StringTokenizer
在几乎所有非人为的案例中都是错误的工具。
答案 3 :(得分:1)
我认为如果您使用第一个replaceAll
函数将单个空格替换所有多个空格然后使用split
函数进行标记化,那将会很好。