0

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

听到是我的字符串: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
/(
-
)
4

3 回答 3

1

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

于 2013-11-14T11:31:36.003 回答
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-internal char 数组的副本,因此如果您只想处理单个字符,第一种方法可能会占用较少的内存和性能)。

于 2013-11-14T11:31:46.533 回答
0

StringTokenizer 实例的行为方式有两种,具体取决于它是使用 returnDelims 标志创建的,其值为 true 或 false:

• 如果标志为假,则分隔符用于分隔标记。记号是非分隔符的连续字符的最大序列。

• 如果标志为真,则分隔符本身被视为标记。因此,标记要么是一个分隔符,要么是非分隔符的最大连续字符序列。

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

 StringTokenizer(mathExpression , "+-x/()", true);
于 2013-11-14T11:32:36.940 回答