无法在for循环中找到Java子字符串

时间:2016-01-06 17:32:08

标签: java for-loop substring

我正在尝试制作一个计算器应用程序,并且我输入了最后一个等式的字符串。 “983 + 388 + 12” 我的解决方法是首先确定运营商的位置。在此之后,我循环向前和向前试图找到2个数字,然后我添加它们。所以我会找到加号然后是983和388并添加它们。我无法匹配与添加符号相关的上一个/下一个数字。

public static void main(String[] args)
{
    int plus=0;
    String string="983+388+12";

    //locating Plus symbol
    for(int i=0;i<string.length();i++)
    {
        if(string.charAt(i)=='+')
        {
            plus=i;
        }
    }

    //locating next number (should be 388)
    for(int i=plus+1;i<string.length();i++)
    {
        if(string.charAt(i)=='+' || string.charAt(i)=='-')
        {
            String nextNumber=string.substring(plus+1, i-1);
            System.out.println(nextNumber);
            break;
        }
    }

我没有收到任何返回的值作为nextNumber的值

3 个答案:

答案 0 :(得分:5)

当您在第一个循环中找到+时,您不会停止扫描该字符串。这会导致plus标记最后一个+的位置,该位置在388之后和12之前。第二个循环从未找到+-之后的位置最后+,所以没有打印过。找到第一个+break离开循环。

此外,为了避免仅找到38,请更正您的substring来电,其结尾索引为独占

String nextNumber = string.substring(plus + 1, i);

答案 1 :(得分:1)

尝试只使用一个循环,见下文(工作示例)。我没有把任何东西分解成更小的方法。

public static void main(String[] args) {
    String string="983+388+12";
    String numberStr="0";
    int lastSignPos = 0;
    int signPos=0;
    char sign = '+';
    int total=0;

    //locating Plus symbol
    for(int i=0; i < string.length(); i++) {
        if(string.charAt(i)=='+' || string.charAt(i)=='-') {
            lastSignPos = signPos;
            signPos = i;
            numberStr = "0";

            if (lastSignPos == 0){
                // first number in series
                numberStr = string.substring(0,signPos);
            } else {
                numberStr = string.substring(lastSignPos + 1, signPos); 
            }

            sign = '+';
            if (string.charAt(lastSignPos)=='-'){
                sign = '-';
            }

            total += Integer.parseInt(sign + numberStr);
        }
    }

    // take care last number
    numberStr = string.substring(signPos+1);
    sign = '+';
    if (string.charAt(signPos)=='-'){
        sign = '-';
    }

    total += Integer.parseInt(sign + numberStr);

    System.out.println(total);
}

答案 2 :(得分:0)

您可以尝试这样的事情:

String example = "123+456+678";
String delim = "+";
StringTokenizer st = new StringTokenizer(example,delim); 
while (st.hasMoreElements()) {
    System.out.println("StringTokenizer Output: " + st.nextElement());
}