import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
public class InputData {
private BufferedReader buf = null;
public InputData() {// 只要输入数据就要使用此语句
this.buf = new BufferedReader(new InputStreamReader(System.in));
}
public String getString(String info) { // 得到字符串信息
String temp = null;
System.out.print(info); // 打印提示信息
try {
temp = this.buf.readLine(); // 接收数据
} catch (IOException e) {
e.printStackTrace();
}
return temp;
}
public int getInt(String info, String err) { // 得到一个整数的输入数据
int temp = 0;
String str = null;
boolean flag = true; // 定义一个标记位
while (flag) {
str = this.getString(info); // 接收数据
if (str.matches("^\\d+$")) { // 判断是否由数字组成
temp = Integer.parseInt(str); // 转型
flag = false; // 结束循环
} else {
System.out.println(err); // 打印错误信息
}
}
return temp;
}
public float getFloat(String info, String err) { // 得到一个小数的输入数据
float temp = 0;
String str = null;
boolean flag = true; // 定义一个标记位
while (flag) {
str = this.getString(info); // 接收数据
if (str.matches("^\\d+.?\\d+$")) { // 判断是否由数字组成
temp = Float.parseFloat(str); // 转型
flag = false; // 结束循环
} else {
System.out.println(err); // 打印错误信息
}
}
return temp;
}
public Date getDate(String info, String err) { // 得到一个日期的输入数据
Date temp = null;
String str = null;
boolean flag = true; // 定义一个标记位
while (flag) {
str = this.getString(info); // 接收数据
if (str.matches("^\\d{4}-\\d{2}-\\d{2}$")) { // 判断是否由数字组成
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
temp = sdf.parse(str); // 将字符串变为Date型数据
} catch (Exception e) {
}
flag = false; // 结束循环
} else {
System.out.println(err); // 打印错误信息
}
}
return temp;
}
public String getPath(String info, String err) { // 得到一个路径格式的输入字符串
String str = "";
String s = "";
boolean flag = true; // 定义一个标记位
while (flag) {
str = this.getString(info); // 接收数据
String ts = str.trim();// 马蛋,这个也不能少,实际读取的可能比字符长,出现空格造成路径出错。
// 下面的路径正则要求文件或文件夹只能用字母数字下划线,可以有扩展名
if (ts.matches("^[a-zA-Z]:[\\\\\\w+]+.?\\w*$|^[a-zA-Z]:[/\\w+]+.?\\w*$")) {// String中\要用\\\\表示,|的运算优先级最后
char c[] = ts.toCharArray();
for (int i = 0; i < c.length; i++) {
if (String.valueOf(c[i]).equals("\\") || String.valueOf(c[i]).equals("/")) {// 将/换成File.separator才是正道,以适应各种系统。
s = s + File.separator;// 在遇到其他系统,对分隔符的判断还要扩大。
} else {
s = s + c[i];
}
}
flag = false; // 结束循环
} else {
System.out.println(err); // 打印错误信息
}
}
return s;
}
}