我如何获得分隔符工作?

时间:2017-10-24 00:04:14

标签: java delimiter

我应该做格式检查。该计划将询问日期: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);

    }
}

2 个答案:

答案 0 :(得分:0)

另一种解决方法是,首先将整个输入作为String,然后使用分隔符拆分输入,如下所示:

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);

    }
}

答案 1 :(得分:0)

试试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);
        }
    }
}