有个程序需要输入学生信息!
见代码:
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那该用什么?

解决方案 »

  1.   

    1,String.split(" ")[2].equals("本科生");
    2,regex = ".+\\s.+\\s(.+)\\s.+";
    3,修改下你的输入格式
      

  2.   

    1,String.split(" ")[2].equals("本科生");
    2,regex = ".+\\s.+\\s(.+)\\s.+";
    能不能详细讲下??不是很懂,尤其是第2行!
      

  3.   

    第二行是正则表达式.String input = "";
    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)
    }
      

  4.   

    下面是我改的public static void main(String[] args) {
    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);
    } // ............
    }
      

  5.   

    String[] info = str.split(" ");
    此行编译不通!
      

  6.   

    可以把student写成一个类,数组存储的是student类型,再循环stu[i].getName()之类的
      

  7.   

    楼主,我说两个方法供你参考吧第一个方案,三楼的说的一行一行的读是正确的,因为in.next()方法,它默认以空格,制表符、回车作为字符串的分隔符。如果你只执行一个in.next()方法,而输入的是:张三丰 001 本科生 计算机, 然后回车,那么你最后得到的字符串就是:张三丰,楼主可以输入如下的三行代码做下验证
    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");意思是用回车作分隔符,