从数学算术表达式中提取数字和运算符,使用Java 8的新功能。

huangapple 未分类评论42阅读模式
英文:

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 &lt; tokens.length; i++) 
{ 
	if (tokens[i] == &#39; &#39;) 
		continue; 
	if (tokens[i] &gt;= &#39;0&#39; &amp;&amp; tokens[i] &lt;= &#39;9&#39;) 
	{ 
	  StringBuffer sbuf = new StringBuffer(); 
		
	  while (i &lt; tokens.length &amp;&amp; tokens[i] &gt;= &#39;0&#39; &amp;&amp; tokens[i] &lt;= &#39;9&#39;) 
	  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&lt;Integer&gt;::new));

by your solution not to need while loop.

for (int i = 0; i &lt; tokens.length; i++) {
   if (Character.isDigit(tokens[i]))             
     values.push(Character.getNumericValue(tokens[i]));
}

huangapple
  • 本文由 发表于 2020年4月9日 12:02:52
  • 转载请务必保留本文链接:https://java.coder-hub.com/61113758.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定