2015-06-15 45 views
0

该程序接受一个字符串并将其中的所有整数相加,我已将分隔符设置为由任意数量的空格包围的“+”。 它正常工作,但现在我希望它与任何负整数,以及例如,如果我输入“8 + 33 + 1,345 - 37”;输出是41.它甚至没有达到1,345, 或从总数中减去-37。分隔符是否被“跳过”?例如,如果我说编译器转到8然后跳过'+'然后跳转到33,我会是正确的吗?如果我将 的分隔符设置为“\ s * \ + | - \ s *”(尝试使用+或 - ),则输出仍为41,为什么?从字符串中添加和减去数字

import java.util.*; 

import java.io.*; 

public class Add_em_up 
    { 

      public static void main (String args [])    

     {  

      Scanner x = new Scanner (System.in); 


      System.out.print("Enter something like 8 + 33 + 1,345 + 137 :"); 


      String s = x.nextLine(); 

      Scanner sc1 = new Scanner (s); 
      sc1.useDelimiter("\\s*\\+\\s*");     

      int sum = 0; 
      while (sc1.hasNextInt()) 
      { 
       sc1.skip(",*"); 
       if (sc1.hasNextInt()) 
       { 
        sum = sum + sc1.nextInt();     
       } 

      } 
      System.out.println("Sum is: " + sum); 
     } 
    } 

回答

3

只要把+-字符类中。

sc1.useDelimiter("\\s*[-+]\\s*");  
+0

'sc1.split(“\\ s * [ - +] \\ s *”); ' –

+0

它的工作原理非常感谢,但为什么我们必须删除“\\”,为什么不能与+ | - 一起使用| |“意味着什么呢? – Limbo

+0

'|'不适用于正负号。它把整个部分放在左边,整个部分放在右边。 –

1

好这里是一个简单的解决方案,如果您有兴趣使用图书馆Exp4j。图书馆将做所有的计算,你所要做的就是通过等式并得出结果。

下面是一个例子。

Expression e = new ExpressionBuilder("3 * sin(y) - 2/(x - 2)") 
    .variables("x", "y") 
    .build() 
    .setVariable("x", 2.3) 
    .setVariable("y", 3.14); 
double result = e.evaluate();