【问题标题】:How do I get delimiter to work?如何让分隔符工作?
【发布时间】:2017-10-24 00:04:14
【问题描述】:

我应该做格式检查。该程序是询问日期,如:5/31/1987。它将 3 个数字存储到三个不同的 int 中。但是,我无法让分隔符工作。我不想使用scanner.useDelimiter("[/\n]"),因为它要求输入也以分隔符结尾。

import java.util.Scanner; // program uses class Scanner

public class DelimiterPlay {
    public static void main(String[] args) {

        Scanner reader = new Scanner(System.in);
        System.out.println("Please enter a date to be checked using the format mm/dd/yyyy.");
        reader.useDelimiter("/");

        int mm = reader.nextInt();
        int dd = reader.nextInt();
        int yy = reader.nextInt();

        System.out.println("Your date is " + mm + ":" + dd + ":" + yy);

    }
}

【问题讨论】:

  • 别担心。无论您使用什么分隔符,扫描器都将始终要求输入以分隔符结尾。

标签: java delimiter


【解决方案1】:

解决这个问题的另一种方法是,首先将整个输入作为字符串获取,然后使用分隔符拆分输入,如下所示:

import java.util.Scanner; // program uses class Scanner

public class DelimiterPlay {
    public static void main(String[] args) {

        Scanner reader = new Scanner(System.in);
        System.out.println("Please enter a date to be checked using the format mm/dd/yyyy.");
        String[] test = reader.nextLine().split("/");

        int mm = Integer.parseInt(test[0]);
        int dd = Integer.parseInt(test[1]);
        int yy = Integer.parseInt(test[2]);

        System.out.println("Your date is " + mm + ":" + dd + ":" + yy);

    }
}

【讨论】:

    【解决方案2】:

    试试reader.useDelimiter("[/\\p{javaWhitespace}]+")。它同时使用/ 和空白字符作为分隔符。

    您的代码不起作用,因为它仅使用/ 作为分隔符。这意味着您会在标记中获得空白字符(空格、制表符和换行符)。所以它只接受类似于10/24/2017/... 的输入。如果输入为10/24/2017\n,则第三个标记将是2017\n,这将在扫描器尝试将其解析为int时触发不匹配异常。

    或者,您可以尝试在当前行中进行模式搜索。

    import java.util.Scanner; // program uses class Scanner
    import java.util.regex.MatchResult;
    
    public class DelimiterPlay {
        public static void main(String[] args) {
            try (Scanner reader = new Scanner(System.in)) {
                do {
                    System.out.println("Please enter a date to be checked using the format mm/dd/yyyy.");
                    if (reader.findInLine("(\\d+)/(\\d+)/(\\d+)") != null) {
                        MatchResult result = reader.match();
                        int dd = Integer.parseInt(result.group(1));
                        int mm = Integer.parseInt(result.group(2));
                        int yy = Integer.parseInt(result.group(3));
                        System.out.println("Your date is " + mm + ":" + dd + ":" + yy);
                        break;
                    } else {
                        reader.nextLine();
                    }
                } while (true);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-20
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 2017-04-27
      相关资源
      最近更新 更多