如何在java中使用stringtokenizer从字符串中逐个获取字符

时间:2013-11-14 11:29:00

标签: java stringtokenizer

我有一个复杂的字符串,我只需要逐个获取此字符串中的每个字符。 在这里我做了什么,但在一个地方我得到了两个 /(我知道是什么,因为它们之间没有分隔符。我怎么能克服这个?

听到我的字符串:3 + 4 * 2 / ( 1 - 5 )

我的代码:

StringTokenizer tokenizer = new StringTokenizer(mathExpression , "+-x/()");
StringTokenizer tokenizer2 = new StringTokenizer(mathExpression , "123456789");

while (tokenizer.hasMoreElements()) {           
  System.out.println(tokenizer.nextToken());            
}

while (tokenizer2.hasMoreElements()) {              
  System.out.println(tokenizer2.nextToken());               
}

输出:

3
4
2
1
5
+
x
/(
-
)

3 个答案:

答案 0 :(得分:1)

无需重新发明轮子。您可以使用String#getChars()String#toCharArray()

答案 1 :(得分:0)

为什么使用StringTokenizer?只需迭代String

for(int i = 0; i < myString.length(); i++) {
    char c = myString.charAt(i);
    // do something with c
}

如果您没有直接对单个字符感兴趣但想要同时拥有所有字符,您也可以从字符串中请求char[]

char[] chars = myString.toCharArray();

(请注意,这将返回String - 内部字符数组的副本,因此,如果您只想处理单个字符,则第一种方法可能会减少内存和性能。

答案 2 :(得分:0)

  

StringTokenizer的一个实例的行为有两种,具体取决于   是否使用带有值的returnDelims标志创建它   是或否:

     

•如果标志为false,则分隔符用于分隔标记。   令牌是连续字符的最大序列,而不是   分隔符。

     

•如果标志为true,则分隔符字符本身   被认为是代币。因此,令牌是一个分隔符   字符,或连续字符的最大序列   不是分隔符。

http://docs.oracle.com/javase/6/docs/api/java/util/StringTokenizer.html

 StringTokenizer(mathExpression , "+-x/()", true);