2011-08-12 49 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++; 
    } 



} 

}