题目
/**
- 使用异常捕获机制完成下述IO操作
- 编写程序,要求下面的类实现功能:
- 添加新员工
- 要求用户输入一个员工信息,格式如下:
- jackson,25,男,5000,2008-12-22
- 用户输入后需要做下述验证:
- 要求用户名长度在1-20个字符之间且必须是英文
- 年龄在0-100之间的整数
- 性别只能是:“男"或"女”
- 当发现用户输入有不符合规定时,提醒用户
- 相关内容输入不符合要求,并要求重新输入。
- 都输入正确后,将该员工添加到emp.txt文件
- 的最后一行。
*/
Emp类:
package Lesson07;
import java.util.Scanner;
public class Emp {
private static String emp0;
private String name;
private short age;
private String gender;
private int salary;
private long hiredate;
public Emp(){}
public void setEmp(){
Scanner sc = new Scanner(System.in);
String emp;
System.out.println("请输入一个员工信息,格式如下:\njackson,25,男,5000,2008-12-22");
emp =sc.next();
String[] emp1 = new String[5];
for(int i=0;i<4;i++){//截出几部分
int index = emp.indexOf(",");
emp1[i] = emp.substring(0, index);
emp = emp.substring(index+1);
}
emp0 = emp;//保存有“-”的日期,在最后输出时使用
emp1[4] = "";//把日期“-”去掉转化为long
for(int i = 0;i<2;i++) {
int index = emp.indexOf("-");
emp1[4] = emp1[4]+emp.substring(0, index);
emp = emp.substring(index+1);
}
emp1[4] = emp1[4]+emp;
name = emp1[0];
age = Short.parseShort(emp1[1]);
gender = emp1[2];
salary = Integer.parseInt(emp1[3]);
hiredate = Long.parseLong(emp1[4]);
sc.close();
}
public void setName() {
Scanner sc = new Scanner(System.in);
String name1 = sc.nextLine();
this.name = name1;
sc.close();
}
public void setAge() {
Scanner sc = new Scanner(System.in);
short age1 = sc.nextShort();
this.age = age1;
sc.close();
}
public void setGender() {
Scanner sc = new Scanner(System.in);
String gender1 = sc.next();
this.gender = gender1;
sc.close();
}
public void namecheck(){
String reg = "^[\\u4e00-\\u9fa5]{0,}$";//正则表达式判断是否有中文
if(name.length()<0||name.length()>20){
System.out.println("姓名输入错误,请重新输入姓名:");
setName();
}
else if(name.matches(reg)){
System.out.println("姓名输入错误,请重新输入姓名:");
setName();
}
}
public void agecheck(){
if(age<0||age>100){
System.out.println("年龄输入错误,请重新输入年龄:");
setAge();
}
}
public void gendercheck(){
if(gender.equals("男")||gender.equals("女")){
}else {
System.out.println("性别输入错误,请重新输入性别:");
setGender();
}
}
@Override
public String toString() {
return "\n"+name+","+age+","+gender+","+salary+","+emp0;
}
}
public class Test06 {
public static void main(String[] args) {
Emp emp = new Emp();
emp.setEmp();
emp.namecheck();
emp.agecheck();
emp.gendercheck();
String emp111 = emp.toString();
try {
File file = new File("d:/emp.txt");
FileOutputStream Fout = new FileOutputStream(file,true);
byte b[] =emp111.getBytes();
Fout.write(b);
Fout.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("成功!");
}
}
假如name输入中文的话本身要重新输入的,就会在emp = sc.next();出现错误
最后发现只要删掉所有sc.close();就可以了