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