描述
Talk is cheap. Look the code.
代码
import java.io.File;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class ScannerUtil {
/**
* 录入数字
*
* @param message 提示消息;可以为null
* @return
*/
public static int inputInt(String message) {
Scanner scanner = new Scanner(System.in);
for (; ; ) {
if (message != null) {
System.out.println(message);
}
if (scanner.hasNextInt()) {
return scanner.nextInt();
}
System.err.printf("[%s] is not an integer number!\n", scanner.next());
}
}
/**
* 录入指定范围内的数字
*
* @param message 提示消息;可以为null
* @param min 最小值
* @param max 最大值
* @return
*/
public static int inputInt(String message, int min, int max) {
for (; ; ) {
int result = inputInt(String.format("%s[%d-%d]", message, min, max));
if (result < min || result > max) {
System.err.printf("[%d] is out of optional range![%d-%d]\n", result, min, max);
} else {
return result;
}
}
}
/**
* 从列表选择
*
* @param message 提示消息;可以为null
* @param list 选项集合
* @param <E> 选项类型
* @return
*/
public static <E> E selectOne(String message, List<E> list) {
System.out.println("Optional list:");
for (int i = 0; i < list.size(); i++) {
System.out.printf("[%d] %s\n", i, list.get(i));
}
return list.get(inputInt(message, 0, list.size() - 1));
}
/**
* 录入字符串
*
* @param message 提示消息;可以为null
* @return
*/
public static String inputString(String message) {
if (message != null) {
System.out.println(message);
}
return new Scanner(System.in).nextLine().trim();
}
/**
* 录入指定格式字符串
*
* @param message 提示消息;可以为null
* @param regex 校验规则
* @return
*/
public static String inputString(String message, String regex) {
for (; ; ) {
String s = inputString(message);
if (s.matches(regex)) {
return s;
} else {
System.err.println("Format error!");
}
}
}
/**
* 录入文件路径
*
* @param message 提示消息;可以为null
* @return
*/
public static String inputFilePath(String message) {
for (; ; ) {
String s = inputString(message);
if (new File(s).exists()) {
return s;
} else {
System.out.printf("[%s] file does not exist!\n", s);
}
}
}
}