英文:
Extract digits and operators from math arithmetic expression using java 8 new features
问题
IntStream.range(0, tokens.length)
.filter(i -> tokens[i] != ' ')
.forEach(i -> {
if (tokens[i] >= '0' && tokens[i] <= '9') {
StringBuilder sbuf = new StringBuilder();
while (i < tokens.length && tokens[i] >= '0' && tokens[i] <= '9') {
sbuf.append(tokens[i++]);
}
values.push(Integer.parseInt(sbuf.toString()));
}
});
英文:
I m trying to write arithmetic expression evaluation in java 8.Following is code written in java 6 but I want to implement it in Java 8 using lambda ,streams n collectors.
for (int i = 0; i < tokens.length; i++)
{
if (tokens[i] == ' ')
continue;
if (tokens[i] >= '0' && tokens[i] <= '9')
{
StringBuffer sbuf = new StringBuffer();
while (i < tokens.length && tokens[i] >= '0' && tokens[i] <= '9')
sbuf.append(tokens[i++]);
values.push(Integer.parseInt(sbuf.toString()));
}
}
答案1
得分: 0
你可以像这样操作:
Arrays.stream(tokens)
.filter(Character::isDigit)
.map(Character::getNumericValue)
.collect(Collectors.toCollection(Stack<Integer>::new));
通过你的解决方案,不需要使用 while
循环。
for (int i = 0; i < tokens.length; i++) {
if (Character.isDigit(tokens[i]))
values.push(Character.getNumericValue(tokens[i]));
}
英文:
You can do like this:
Arrays.stream(tokens)
.filter(Character::isDigit)
.map(Character::getNumericValue)
.collect(Collectors.toCollection(Stack<Integer>::new));
by your solution not to need while
loop.
for (int i = 0; i < tokens.length; i++) {
if (Character.isDigit(tokens[i]))
values.push(Character.getNumericValue(tokens[i]));
}
专注分享java语言的经验与见解,让所有开发者获益!
评论