有个程序需要输入学生信息!
见代码:
Scanner in=new Scanner(System.in);
System.out.print("请输入需要加入几个学生信息:");
int num=in.nextInt();
Student[] Stu=new Student[num];
System.out.println("请输入学生信息,输入格式如下:");
System.out.println("姓名 学号 学生类型 专业");
for(int i=0;i<num;i++){
Stu[i]=new undergraduatestudent();
String str = in.next();
问题来了,当我输入比如:张三丰 001 本科生 计算机
我该如何知道该学生是本科生还是研究生??
用equals?
怎么个用法,如果不是用equals那该用什么?
见代码:
Scanner in=new Scanner(System.in);
System.out.print("请输入需要加入几个学生信息:");
int num=in.nextInt();
Student[] Stu=new Student[num];
System.out.println("请输入学生信息,输入格式如下:");
System.out.println("姓名 学号 学生类型 专业");
for(int i=0;i<num;i++){
Stu[i]=new undergraduatestudent();
String str = in.next();
问题来了,当我输入比如:张三丰 001 本科生 计算机
我该如何知道该学生是本科生还是研究生??
用equals?
怎么个用法,如果不是用equals那该用什么?
2,regex = ".+\\s.+\\s(.+)\\s.+";
3,修改下你的输入格式
2,regex = ".+\\s.+\\s(.+)\\s.+";
能不能详细讲下??不是很懂,尤其是第2行!
String regex = ".+\\s.+\\s(.+)\\s.+";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input );
if(m.matches()) {
boolean b = m.getGroup(1).equals("本科生");
System.out.println(b)
}
Scanner in = new Scanner(System.in);
System.out.print("请输入需要加入几个学生信息:");
int num = in.nextInt();
//去除上次输入整形后的行,让循环中in.nextLine()能正确读取每行
in.nextLine();
Student[] Stu = new Student[num];
System.out.println("请输入学生信息,输入格式如下:\n姓名 学号 学生类型 专业\n");
for (int i = 0; i < num; i++) {
String str = in.nextLine();//读一行
String[] info = str.split(" ");
if (info.length != 4) {
System.out.println("此行格式无效");
continue;
} if ("研究生".equals(info[2]))
Stu[i] = new UndergraduateStudent();
else
Stu[i] = new Student();
Stu[i].setName(info[0].trim());
Stu[i].setSno(info[1].trim());
Stu[i].setStype(info[2].trim());
Stu[i].setMajor(info[3].trim());
} for (Student stu : Stu) {
System.out.println(stu);
} // ............
}
此行编译不通!
Scanner in=new Scanner(System.in);
String s=in.next();
System.out.println(s);
测试时输入:张三丰 001 本科生 计算机 回车,我想楼主看到的输出应是:张三丰
如果感兴趣还可以进行下面这样的测试:
Scanner in=new Scanner(System.in);
String s=in.next();
System.out.println(s);
System.out.println(in.next());
System.out.println(in.next());
System.out.println(in.next());
测试时输入:张三丰 001 本科生 计算机 回车,我想楼主看到的输出应是:张三丰 换行001 换行本科生 换行 计算机
通过这个测试楼主应明白了,你输入一行数据,要调四个in.next()方法才能完全得到,如果你输入10个同学的信息那么就要40个in.next方法才行,所以我建议楼主把in.next()方法换成in.nextLine()方法,然后再用split(" ")方法或split("\\s+")方法拆分,因为楼上几位对这个都说得很详细了,所以我就不多说了。我推荐的方法是用String对象的contains方法来分析是不是研究生,如
"张三丰 001 本科生 计算机".contains("研究生"); 这句代码肯定返回true,楼主可以试试第二种方案:我刚才用了很大一断讲了为啥应用in.nextLine()方法,那么用in.next()方法真的不可以吗,答案是否定的,可以的,楼主可以试试下面的代码。
Scanner in=new Scanner(System.in);
in.useDelimiter("\n");
String s=in.next();
System.out.println(s);
System.out.println(s.contains("研究生"));
注意,多了一行代码,in.useDelimiter("\n");意思是用回车作分隔符,