2011-08-12 86 views
1

我在程序中使用字符串標記器來分隔字符串。 我試圖使用的分隔符是「);」。但我發現StringTokenizer使用)和;作爲2個不同的分隔符。 但我想結合使用它。 我該怎麼辦?Java中的字符串標記器

我的代碼:

StringTokenizer st = new StringTokenizer(str,");"); 
String temp[] = new String[st.countTokens()]; 
while(st.hasMoreTokens()) { 
    temp[i]=st.nextToken(); 
    i++; 
} 

感謝

+10

請參閱http://stackoverflow.com/questions/6983856/why-is -stringtokenizer棄用。它顯示了tokenizer爲什麼不能用於多字符分隔符並顯示替代方法(如'String.split()'。 –

+0

@Ray:我認爲這是正確的,並且是一個很好的答案。 – Kowser

+0

好吧我現在知道我會必須使用String.split(),但它需要我不熟悉的正則表達式表達式。 你能幫我什麼正則表達式exp我可以用於「);」 – Gaurav

回答

2

正如許多答案所示,String.split()將解決您的問題。爲了逃避你試圖來標記你將不得不逃離「)」在你的順序是這樣的具體順序:

str.split("\\);"); 
+0

謝謝傑森。這是我一直在尋找:) – Gaurav

2

這段繩子#拆分的替代方案(StringTokenizer的已廢棄),如果你喜歡Commons Lang中,有StringUtils#splitByWholeSeparator(空安全的,沒有必要亂七八糟的正則表達式):

String temp[] = splitByWholeSeparator(str, ");"); 
+0

不,StringTokenizer不被棄用!雖然常見的錯誤! –

+0

嗯,不是@Deprecated,但是「StringTokenizer是一個遺留類,爲了兼容性原因被保留,雖然它在新代碼中的使用不受歡迎。建議任何尋求該功能的人都使用String或java.util.regex的split方法封裝來代替。「 – Thilo

+0

是的,完全正確,這是」錯誤「的來源。取消。小D棄用我們可以說! –

0

這有什麼問題嗎?

String temp[] = str.split("\\);"); 
+0

它給出了regex.PatternSyntaxException。 split()需要正則表達式 – Gaurav

0

您應該嘗試使用String類中的split(String regex)方法。 它應該工作得很好,我想它會返回一個字符串數組(就像你似乎更喜歡)。 您總是可以使用Arrays.asList()方法轉換爲列表。

乾杯, Tiberiu

0

「的StringTokenizer是保留兼容性的原因,雖然它的使用是在新代碼氣餒的遺留類,它建議任何尋求此功能使用字符串或Java的分割方法改爲使用.util.regex包。「

這就是Sun的文檔所說的。

​​

是標記字符串的推薦方法。

0

這將爲你工作。

import java.util.StringTokenizer; 


public class StringTest { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    int i = 0; 
    String str = "one);two);three);four"; 
    StringTokenizer st = new StringTokenizer(str, ");"); 
    String temp[] = new String[st.countTokens()]; 

    while (st.hasMoreTokens()) { 

     temp[i] = st.nextToken(); 
     System.out.println(temp[i]); 
     i++; 
    } 



} 

}