Java:在字符串中查找整数(计算器)

时间:2015-10-03 07:34:21

标签: java

如果我的String看起来像这样:String calc = "5+3"。我可以对integers 53

进行子字符串

在这种情况下,你知道String的外观,但它看起来像这样:String calc = "55-23"因此,我想知道是否有一种方法来识别字符串中的整数。

3 个答案:

答案 0 :(得分:2)

对于类似的东西,正则表达式是你的朋友:

String text = "String calc = 55-23";
Matcher m = Pattern.compile("\\d+").matcher(text);
while (m.find())
    System.out.println(m.group());

输出

55
23

现在,您可能需要将其展开以支持小数:

String text = "String calc = 1.1 + 22 * 333 / (4444 - 55555)";
Matcher m = Pattern.compile("\\d+(?:.\\d+)?").matcher(text);
while (m.find())
    System.out.println(m.group());

输出

1.1
22
333
4444
55555

答案 1 :(得分:1)

您可以阅读每个字符并找到它的Ascii代码。如果它在48到57之间,则评估它的代码,它是一个数字,如果不是,则它是一个符号。 如果您发现另一个字符也是数字,您必须添加到上一个数字,直到您到达符号。

    String calc="55-23";
    String intString="";
    char tempChar;
    for (int i=0;i<calc.length();i++){
        tempChar=calc.charAt(i);
        int ascii=(int) tempChar;
        if (ascii>47 && ascii <58){
            intString=intString+tempChar;
        }
        else {
            System.out.println(intString);
            intString="";
            }
    }

答案 2 :(得分:1)

您可以使用([\d]+)([+-])([\d]+)之类的正则表达式来获取完整的二进制表达式。

Pattern pattern = Pattern.compile("([\\d]+)([+-])([\\d]+)");

String calc = "5+3";

Matcher matcher = pattern.matcher(calc);

if (matcher.matches()) {

    int lhs = Integer.parseInt(matcher.group(1));
    int rhs = Integer.parseInt(matcher.group(3));

    char operator = matcher.group(2).charAt(0);

    System.out.print(lhs + " " + operator + " " + rhs + " = ");

    switch (operator) {

        case '+': {
            System.out.println(lhs + rhs);
        }

        case '-': {
            System.out.println(lhs - rhs);
        } 
    }
}

输出:

5 + 3 = 8