Java 中的字符串分词器
我有一个文本文件,其中包含由“|”分隔的数据。我需要获取每个字段(由“|”分隔)并对其进行处理。文本文件可以如下所示:
美国广播公司|防守||断续器
我使用字符串分词器(JDK 1.4)来获取每个字段值。现在的问题是,我应该在DEF之后得到一个空字符串。但是,我没有得到DEF和FGHT之间的空白空间。
我的结果应该是 - ABC,DEF,“”,FGHT,但我得到了ABC,DEF,FGHT
我有一个文本文件,其中包含由“|”分隔的数据。我需要获取每个字段(由“|”分隔)并对其进行处理。文本文件可以如下所示:
美国广播公司|防守||断续器
我使用字符串分词器(JDK 1.4)来获取每个字段值。现在的问题是,我应该在DEF之后得到一个空字符串。但是,我没有得到DEF和FGHT之间的空白空间。
我的结果应该是 - ABC,DEF,“”,FGHT,但我得到了ABC,DEF,FGHT
从文档 :StringTokenizer
StringTokenizer 是一个旧类,出于兼容性原因而保留,尽管不鼓励在新代码中使用它。建议任何寻求此功能的人改用 String 的 split 方法或 java.util.regex 包。
以下代码应该有效:
String s = "ABC|DEF||FGHT";
String[] r = s.split("\\|");
使用该标志并检查分隔符的后续两个匹配项: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));