我有一个复杂的字符串,我只需要逐个获取此字符串中的每个字符。 在这里我做了什么,但在一个地方我得到了两个 /(我知道是什么,因为它们之间没有分隔符。我怎么能克服这个?
听到我的字符串: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
/(
-
)
答案 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);