如何分别读取Java中的字符和整数

时间:2018-07-12 09:05:13

标签: java regex string

我必须使用扫描仪读取以下符号并分别进行处理。 第一行是游戏动物的生命和食物,第二行是她将“-”向左移动,“ +”向右移动 输入为:

@@@xx@*

1 -1 -1 4

我从某件事开始,但还不够:

Scanner sc = new Scanner(System.in).useDelimiter("\\s*");

    while (!sc.hasNext("z")) {
        char ch = sc.next().charAt(0);


        System.out.print("[" + ch + "] ");// to chack what is happening


    }

如何读取带有“-”和“ +”的第二行整数,然后对其进行运算?

6 个答案:

答案 0 :(得分:1)

您可以使用诸如nextInt()next()之类的Scanner内置方法,也可以寻找诸如hasNextInt()之类的东西。

答案 1 :(得分:1)

您可以使用各种扫描仪类功能来执行此操作。输入为: 1 -1 -1 4

创建两个数组来存储字符“-”和“ +”,并创建一个数组来存储整数

Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
   if(sc.hasNextInt()){
         intArray = sc.nextInt();
   }
   else charArray = sc.next();
}

希望这可以解决您的问题

答案 2 :(得分:0)

Java Scanner类具有用于捕获和解析字符串下一部分的大量方法,例如next()nextInt()nextDouble()

代码如下:

String input = "1 -1 -1 4";
Scanner s = new Scanner(input);
int i1 = s.nextInt();
int i2 = s.nextInt();
int i3 = s.nextInt();
int i4 = s.nextInt();

将读取所有四个值

答案 3 :(得分:0)

如果输入字符可以解析,则可以将其解析为整数,如果抛出数字格式异常,则可以继续执行代码,那么您应该知道输入字符不是数字。

   Scanner sc = new Scanner(System.in).useDelimiter("\\s*");

    while (!sc.hasNext("z")) {
        char ch = sc.next().charAt(0);
        try {
            int a = Integer.parseInt(String.valueOf(ch));
            switch (a){
                case 1:
                    // your condition
                case -1:
                    // your condition
                case -4:
                    //condition
                default:
                    // your condition
            }
        }catch (NumberFormatException ex){
            System.out.printf("input character is not number");
        }
        System.out.print("[" + ch + "] ");// to chack what is happening
    }

答案 4 :(得分:0)

您可以阅读整行而不是按字符阅读。然后将行拆分为String数组,它将包含行字符并与array一起操作。这是您的案件line.replaceAll("(-*[\\W\\d\\w])(\\s*)", "$1 ")

的解决方案
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (!sc.hasNext("z")) {
  String line = sc.nextLine();
  String[] split = line.replaceAll("(-*[\\W\\d\\w])(\\s*)", "$1 ").trim().split(" ");
  Arrays.asList(split).forEach(ch -> System.out.print(ch + " "));
}

}

输出:

@@@xx@*
@ @ @ x x @ * 

1 -1 -1 4 
1 -1 -1 4 

答案 5 :(得分:0)

正如大多数人所说的,您可以使用scanner.nextInt()并查看是否必须向左或向右移动,您需要使用Math.signum()方法来告诉您要去然后您可以将Math.abs()用作绝对值。