我有一个文本文件,其中包含由'|'分隔的数据。我需要获取每个字段(由'|'分隔)并处理它。该文本文件可以如下图所示:Java中的字符串标记器
ABC | DEF || FGHT
我使用的字符串标记(JDK 1.4)获取每个字段的值。现在的问题是,我应该在DEF之后得到一个空字符串。但是,我没有得到DEF & FGHT之间的空白区域。
我的结果应该是 - ABC,DEF, “”,FGHT但我正在逐渐ABC,DEF,FGHT
我有一个文本文件,其中包含由'|'分隔的数据。我需要获取每个字段(由'|'分隔)并处理它。该文本文件可以如下图所示:Java中的字符串标记器
ABC | DEF || FGHT
我使用的字符串标记(JDK 1.4)获取每个字段的值。现在的问题是,我应该在DEF之后得到一个空字符串。但是,我没有得到DEF & FGHT之间的空白区域。
我的结果应该是 - ABC,DEF, “”,FGHT但我正在逐渐ABC,DEF,FGHT
从StringTokenizer
文档:
的StringTokenizer是一个遗留类 保持兼容性的原因 虽然它的使用是在新 代码气馁。建议任何寻求此功能的 都使用String的 拆分方法或代替使用java.util.regex包的 。
下面的代码应该工作:
String s = "ABC|DEF||FGHT";
String[] r = s.split("\\|");
您可以使用需要一个额外的 'returnDelims' 布尔型构造,并通忠于它。 这样您将收到分隔符,这将允许您检测这种情况。
或者你可以实现你自己的字符串标记器,它可以做你需要的东西,但并不那么难。
的StringTokenizer忽略空元素。考虑使用1.4中的String.split。
从的javadoc:
的StringTokenizer是一个遗留类 保持兼容性的原因 虽然它的使用是在新 代码气馁。建议任何寻求此功能的 都使用String的 拆分方法或代替使用java.util.regex包的 。
使用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需要Enumeration的情况。
如果您切换到String.split(String)
,请务必引用分隔符。手动("\\|"
)或自动使用string.split(Pattern.quote(delim));
它是简单的,因为这...
import java.util.StringTokenizer;
class stringtoken{
public static void main (String args[]){
String s1 = "StringTokenizer by Himal";
StringTokenizer stt = new StringTokenizer(s1," ");
while (stt.hasMoreTokens()){
String token = stt.nextToken();
System.out.println(token);
}
}
}
结果:
StringTokenizer
by
Himal
包com.java.String;
import java.util.StringTokenizer;
公共类StringWordReverse {
public static void main(String[] kam) {
String s;
String sReversed = "";
System.out.println("Enter a string to reverse");
s = "THIS IS ASHIK SKLAB";
StringTokenizer st = new StringTokenizer(s);
while (st.hasMoreTokens()) {
sReversed = st.nextToken() + " " + sReversed;
}
System.out.println("Original string is : " + s);
System.out.println("Reversed string is : " + sReversed);
}
}
输出:
输入字符串以扭转
原始字符串是:THIS IS ASHIK SKLAB
反转串是:SKLAB ASHIK就是这个
不错的代码! +1 :) – ADJ
这里是另一种方式来解决这个问题
String str = "ABC|DEF||FGHT";
StringTokenizer s = new StringTokenizer(str,"|",true);
String currentToken="",previousToken="";
while(s.hasMoreTokens())
{
//Get the current token from the tokenize strings
currentToken = s.nextToken();
//Check for the empty token in between ||
if(currentToken.equals("|") && previousToken.equals("|"))
{
//We denote the empty token so we print null on the screen
System.out.println("null");
}
else
{
//We only print the tokens except delimiters
if(!currentToken.equals("|"))
System.out.println(currentToken);
}
previousToken = currentToken;
}
此答案不添加任何内容。就此而言,正如接受的答案(2010年发布的那样)指出,建议不要使用'StringTokenizer'开头。 – Radiodef
由分隔的输入数据“|”和StringTokenizer类只捕获空白? – Azi
不,我们可以使用任何分隔符。它可以是空格,字符,任何字符串集合。 – MacKa