簡體   English   中英

Java Scanner分隔符和System.in

[英]Java Scanner delimiter and System.in

當我要求用戶輸入一些數字然后我想處理它們時,我遇到了一些問題。 請看下面的代碼。

為了使這個程序正常工作,我需要在結尾處輸入兩個逗號,然后就可以了。 如果我不放2個逗號然后程序不想完成或我得到一個錯誤。

誰能幫我這個? 我該怎么做才能在最后輸入這些逗號

package com.kurs;

import java.util.Scanner;

public class NumberFromUser {

    public static void main(String[] args) {
        String gd = "4,5,  6, 85";
        Scanner s = new Scanner(System.in).useDelimiter(", *");
        System.out.println("Input some numbers");
        System.out.println("delimiter to; " + s.delimiter());
        int sum = 0;
        while (s.hasNextInt()) {

            int d = s.nextInt();

            sum = sum + d;

        }
        System.out.println(sum);
        s.close();
        System.exit(0);

    }

}

你的程序掛在s.hasNextInt()中

Scanner類的文檔:

next()和hasNext()方法及其原始類型的伴隨方法(例如nextInt()和hasNextInt())首先跳過與分隔符模式匹配的任何輸入,然后嘗試返回下一個標記。 hasNext和next方法都可能阻止等待進一步輸入。

簡而言之,掃描器只是在最后一個整數之后等待更多輸入,因為它需要以正則表達式“,*”的形式找到分隔符,以確定最后一個整數是完全鍵入的。

您可以在此討論中閱讀有關您的問題的更多信息:

鏈接到stackoverflow的討論

要解決此類問題,您可以更改程序以讀取整個輸入字符串,然后使用String.split()方法將其拆分。 嘗試使用這樣的東西:

import java.util.Scanner;

public class NumberFromUser {

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String[] tokens = sc.nextLine().split(", *");

        int sum = 0;

        for (String token : tokens) {
            sum += Integer.valueOf(token);
        }

        System.out.println(sum);
    }

}

看起來你可以做一些像這樣的事情。

public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        System.out.println("Input some numbers");
        System.out.println("When did you to finish and get the total sum enter ,, and go");
        boolean flag = true;
        int sum = 0;
        while (s.hasNextInt() && flag) {

            int d = s.nextInt();
            sum = sum + d;
        }

        System.out.println(sum);

    }

嘗試允許行尾也是分隔符:

Scanner s = new Scanner(System.in).useDelimiter(", *|[\r\n]+");

我改變了你的解決方案,可能我的解決方案不是最好的,但似乎有效:

    Scanner s = new Scanner(System.in);
    System.out.println("Input some numbers");
    int sum = 0;
    if (s.hasNextLine()) {
        // Remove all blank spaces
        final String line = s.nextLine().replaceAll("\\s","");

        // split into a list
        final List<String> listNumbers = Arrays.asList(line.split(","));

        for (String str : listNumbers) {
            if (str != null && !str.equals(""))  {
            final Integer number = Integer.parseInt(str);
            sum = sum + number;
            }
        }
    }
    System.out.println(sum);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM