[英]java StringTokenizer unexpected results
我有以下代碼將標記字符串以創建對象列表:
import java.util.StringTokenizer;
public class TestStringTokenizer {
private final static String INTERNAL_DELIMETER = "#,#";
private final static String EXTERNAL_DELIMETER = "#|#";
public static void main(String[]aregs){
String test= "1#,#Jon#,#176#|#2#,#Jack#,#200#|#3#,#Jimmy#,#160";
StringTokenizer tokenizer = new StringTokenizer(test, EXTERNAL_DELIMETER);
while(tokenizer.hasMoreElements()){
System.out.println(tokenizer.nextElement());
//later will take this token and extract elements
}
}
}
我期望的輸出是什么
1#,#喬恩#,#176
2#,##傑克,#200
3#,麥#,#160
我得到的是 :1
,
喬恩
,
176
2
,
插口
,
200
3
,
吉米
,
160
如果我將內部分隔符改為某些東西,它會正常工作為什么會發生這種情況?
AccordIng到StringTokenizer JavaDocs
http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html
StringTokenizer是一個遺留類,出於兼容性原因而保留,盡管在新代碼中不鼓勵使用它。 建議任何尋求此功能的人都使用String的split方法或java.util.regex包。
請改用String.split:
String[] strArr = stringToSplit.split(INTERNAL_DELIMETER);
您需要做的唯一更改是EXTERNAL_DELIMETER中的or-pipe(“|”)是一個特殊的正則表達式字符,必須進行轉義:“\\\\ |”。
可以在String.split Javadoc中找到更多信息:
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)
StrinTokenizer無法使用表達式作為分隔符,請嘗試使用Scanner
Scanner sc = new Scanner(test);
sc.useDelimiter("#\\|#");
while (sc.hasNext()) {
System.out.println(sc.next());
}
StrinTokenizer構造函數的第二個參數是分隔符(每個字符都是分隔符)
您可以使用String.split
public class TestStringTokenizer {
private final static String INTERNAL_DELIMETER = "#,#";
private final static String EXTERNAL_DELIMETER = "#|#";
public static void main(String[]aregs){
String test= "1#,#Jon#,#176#|#2#,#Jack#,#200#|#3#,#Jimmy#,#160";
for (String s : test.split("#\\|#"))
System.out.println(s);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.