有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Java8新特性从数学算术表达式中提取数字和运算符

我正在尝试用Java8编写算术表达式求值。下面是用Java6编写的代码,但我想用lambda、streams和n收集器在Java8中实现它

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) 个答案

  1. # 1 楼答案

    您可以这样做:

    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]));
    }