scanner.nextLine() 在用户输入 1 - 2 时导致错误。如何让我的程序接受此输入为 1?

scanner.nextLine() results in an error when user inputs 1 - 2. How do I allow my program to accept this input as 1?

我试图让用户输入一个数字或一个未求解的方程作为他们的输入。我的程序应该通过将 Integer.valueOf(scanner.nextLine()) 分配给变量来获取用户输入。当用户输入 2 - 1 时,出现错误 java.lang.AssertionError:。这是扫描仪的限制,还是我的代码实现不正确?我试图在事后将用户输入分配给第二个变量,希望这能解决我遇到的问题,但我遇到了同样的错误。有人可以帮我吗?

.nextLine(),顾名思义,就是一整行。它将 returns "2 - 1" 作为一个字符串。 Integer.parseInt() 解析整数;它不是计算器。它无法解析 2 - 1.

这听起来像是家庭作业;然后,家庭作业可能会涉及您编写一个程序,该程序可以按顺序读取“2”、“-”和“1”,将它们读入多个变量,然后进行减法运算。

扫描仪不是解决这个问题的好方法;如果你必须使用它,你必须弄乱定界符以确保你得到 2、- 和 1,按照这个顺序 - 开箱即用,扫描仪按空格分开,所以输入“2 - 1”将导致 3记号,但是“2-1”(没有空格)是一个记号,而不是您在编写计算器时想要的。

您可以遍历该行的字符,直到找到一个不是数字的字符,然后只解析您已经处理过的部分。

private static int parseIntPart(final String str) {
    final int len = str.length();
    final StringBuilder sb = new StringBuilder(len);
    for (int i = 0; i < len; i++) {
        final char c = str.charAt(i);
        if (c >= '0' && c <= '9') {
            sb.append(c);
        } else {
            break;
        }
    }
    return Integer.parseInt(sb.toString());
}
public static void main(final String[] args){
    Scanner scan = new Scanner(System.in);
    int i = parseIntPart(scan.nextLine());
}