Java 中的字符串分词器

2022-09-02 00:00:37

我有一个文本文件,其中包含由“|”分隔的数据。我需要获取每个字段(由“|”分隔)并对其进行处理。文本文件可以如下所示:

美国广播公司|防守||断续器

我使用字符串分词器(JDK 1.4)来获取每个字段值。现在的问题是,我应该在DEF之后得到一个空字符串。但是,我没有得到DEF和FGHT之间的空白空间。

我的结果应该是 - ABC,DEF,“”,FGHT,但我得到了ABC,DEF,FGHT


答案 1

从文档 :StringTokenizer

StringTokenizer 是一个旧类,出于兼容性原因而保留,尽管不鼓励在新代码中使用它。建议任何寻求此功能的人改用 String 的 split 方法或 java.util.regex 包。

以下代码应该有效:

String s = "ABC|DEF||FGHT";
String[] r = s.split("\\|");

答案 2

使用该标志并检查分隔符的后续两个匹配项:returnDelims

String str = "ABC|DEF||FGHT";
String delim = "|";
StringTokenizer tok = new StringTokenizer(str, delim, true);

boolean expectDelim = false;
while (tok.hasMoreTokens()) {
    String token = tok.nextToken();
    if (delim.equals(token)) {
        if (expectDelim) {
            expectDelim = false;
            continue;
        } else {
            // unexpected delim means empty token
            token = null;
        }
    }

    System.out.println(token);
    expectDelim = true;
}

此打印

ABC
DEF
null
FGHT

API并不漂亮,因此被认为是遗留的(即“几乎过时”)。仅当模式匹配过于昂贵(这应该只适用于极长的字符串)或 API 需要枚举的情况时,才使用它。

如果切换到 ,请确保引号分隔符。手动 () 或自动使用String.split(String)"\\|"string.split(Pattern.quote(delim));