Java解析具有大量空格的字符串

时间:2012-02-14 21:32:09

标签: java string parsing tokenize

我有一个包含多个空格的字符串,但是当我使用标记生成器时,它会在所有这些空格中将它分开。我需要令牌来包含那些空格。我如何利用StringTokenizer返回带有我分裂的标记的值?

4 个答案:

答案 0 :(得分:2)

您会在StringTokenizer的文档中注明,建议不要将其用于任何新代码,String.split(regex)就是您想要的

String foo = "this is      some  data      in   a string";
String[] bar = foo.split("\\s+");

编辑以添加:或者,如果您的需求大于简单拆分,则使用PatternMatcher类进行更复杂的正则表达式匹配和提取。

再次编辑:如果您想保留自己的空间,实际上了解正则表达式确实有帮助:

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函数进行标记化,那将会很好。