如何在String表达式Java中评估> 9数字

时间:2015-08-08 16:54:39

标签: java string

如果表达式的值为0到9但

,则生活非常简单

如果用户输入了expression = 23 + 52 * 5,那么我将它带入一个名为expression的字符串。

现在我想要的是一个新的String或char数组,其方式是:

String s or char[] ch =  ['23','+','52','*','5']

以便ch [0]或s.charAt(0)给我23 而不是2

为此,我尝试了以下操作,并坚持下一步该做什么:

    for(int i=0;i<expression.length();i++)
        {       
            int operand = 0;
            while(i<expression.length() && sol.isOperand(expression.charAt(i))) {
                // For a number with more than one digits, as we are scanning 
                // from left to right. 
                // Everytime , we get a digit towards right, we can 
                // multiply current total in operand by 10 
                // and add the new digit. 
                operand = (operand*10) + (expression.charAt(i) - '0'); 
                i++;
            }
            // Finally, you will come out of while loop with i set to a non-numeric 
            // character or end of string decrement it because it will be
            // incremented in increment section of loop once again. 
            // We do not want to skip the non-numeric character by 
            // incrementing it twice. 
            i--;

         /**
         * I have the desired integer value but how to put it on a string 
         * or char array to fulfill my needs as stated above.
         **/
         // help or ideas for code here to get desired output

       }

在while循环中,如果提供的char为isOperand(char)>=0,则方法<=9返回一个布尔值true。

4 个答案:

答案 0 :(得分:4)

当你将表情分开时,你会想要String[]。正则表达式lookbehind / lookahead(Java Pattern Reference)允许您拆分字符串并保留分隔符。在这种情况下,您的分隔符是操作数。您可以使用这样的拆分模式:

public static void main(String[] args) throws Exception {
    String expression = "23+52*5";
    String[] pieces = expression.split("(?<=\\+|-|\\*|/)|(?=\\+|-|\\*|/)");
    System.out.println(Arrays.toString(pieces));
}

结果:

[23, +, 52, *, 5]

要考虑的一个问题是,如果你的表达式包含任何空格,那么在将表达式拆分之前你将要删除它们。否则,空格将包含在结果中。要从String.replaceAll()中删除表达式中的空格,请执行以下操作:

expression = expression.replaceAll("\\s+", "");

\\s+”是一个正则表达式模式,表示空格字符:[\ t \ n \ x0B \ f \ r]。该语句将所有空格字符替换为空白空格,基本上将其删除。

答案 1 :(得分:1)

尝试使用开关案例:

//读取第一个字符 切换数据 如果数字:它是什么(0,1,2,3 ...?) 保存号码 如果它是一个运营商 保存运营商 ** 2交换机有4个用于操作员,10个用于数字**

//读下一个字符 再次切换 如果它是一个数字后面的数字将两个字符添加到字符串中 如果它是一个运营商&#34;关闭&#34;数字字符串并将其转换为int

如果您需要一些代码,我将很乐意为您提供帮助。 希望答案很有用。

for i = 1 ; i = string.length

 switch :

case 1,2,3,4,5,6,7,8,9,0 (if its a digit)
   x(char) = char(i)
case +,-,*,/ (operator)
   y(char) = char(i)
   x[1] + x[2] +...x[n] = X(string) // build all the digits saves before the       operator into 1 string
convert_to_int(X(string))

答案 2 :(得分:1)

String expr = "23+52*5";

String[] operands = expr.split("[^0-9]");
String[] operators = expr.split("[0-9]+");

这将其分解为:

debugger info

答案 3 :(得分:0)

您可以使用正则表达式:

\d+

将获取一个或多个连续数字的任何实例。