Java,您如何让用户在没有空格的一行中输入值?

hfyxw5xn  于 2022-10-01  发布在  Java
关注(0)|答案(3)|浏览(166)

我是学习 java 的新手。我目前的任务是让用户使用运算符输入他们想要的值,并在一行中得到一个不带空格的结果。我弄明白了大部分代码,但在不添加空格的情况下运行它时遇到了麻烦。例如:1+1=2(这将起作用)1+1(这会导致错误)

以下是我的代码:

import java.util.Scanner;

public class Mod2 {

    Scanner sc = new Scanner(System.in);
    static int value1;
    static int value2;
    static int result;
    String input = "";

    public static void main(String[] args){
        Mod2 m = new Mod2();

        System.out.println("Beginning Application");
        System.out.println("Enter expression like [value][operator][value2] no spaces");

        value1 = m.sc.nextInt();
        String input = m.sc.next();
        value2 = m.sc.nextInt();

        switch (input) {
        case "+":   
            result = (value1 + value2);
            System.out.println(result);
            break;
        case "-":   
            result = (value1 - value2);
            System.out.println(result);
            break;
        case "*":   
            result = (value1 * value2);
            System.out.println(result);
            break;
        case "/":   
            result = (value1 / value2);
            System.out.println(result);
            break;
        case "%":   
            result = (value1 % value2);
            System.out.println(result);
            break;
        }

        System.out.println("Ending application");               
        System.exit(0);
    }
}
z9gpfhce

z9gpfhce1#

您可以按操作符拆分输入字符串,然后使用该字符串的前半部分作为值1,然后使用后半部分作为值2。

input.split("-");//您可以在此处使用正则表达式来检查运算符是否存在

...
    String input = m.sc.next();
    String[] operation = input.split("(?<=\d)(?=\D)|(?<=\D)(?=\d)");
    Integer value1 = Integer.parseInt(operation[0]);
    Integer value2 = Integer.parseInt(operation[2]);

    switch (operation[1]) {
      case "+":
        result = (value1 + value2);
        break;
      case "-":
        result = (value1 - value2);
        break;
      case "*":
        result = (value1 * value2);
        break;
      case "/":
        result = (value1 / value2);
        break;
      case "%":
        result = (value1 % value2);
        break;
    }

    System.out.println(result);

这应该允许您输入“2+2”并产生4作为结果

qmb5sa22

qmb5sa222#

对于nextXXX()方法(nextLine()除外),Scanner使用最多某个分隔符的字符串作为其标记。默认情况下,使用空格作为分隔符。例如,因为字符串“100+50”不包含任何空格,所以它是单个标记。此内标识不是int,因此对nextInt()的调用将失败。

你能做什么?要么您使用nextLine()阅读整行内容,然后您必须自己解析它。

或者,使用不同的分隔符。例如。

m.sc.useDelimiter("[^0-9]"); // delimiter is any non-digit.
int value1 = m.sc.nextInt(); 
m.sc.useDelimiter("[0-9]");  // delimiter is any digit
String operator = m.sc.next();
m.sc.useDelimiter("[^0-9]"); // delimiter is any non-digit.
int value2 = m.sc.nextInt();

分隔符是正则表达式。您可以在Pattern的文档中找到有关这些内容的更多信息。

编辑:注意,使用的表达式不适用于负数。

mgdq6dx1

mgdq6dx13#

我不知道我是否理解,但是当正确的操作员中有空间时,问题就会发生。

您只需在输入开关之前删除操作符空格,如下所示:

input = input.replaceAll(" ","");

switch (input) {...

相关问题