gpt4 book ai didi

java - 使用 Scanner 类读取扫描仪字符串

转载 作者:行者123 更新时间:2023-12-02 04:28:55 25 4
gpt4 key购买 nike

我在创建一个学生类时遇到问题,该类包含一个构造函数,该构造函数采用格式为“Brookes 00918 X12 X14 X16 X21”的扫描仪字符串。条件是要有学生姓名和学号,类(class)代码以“X”开头。如果他们不满意,我会抛出In CorrectFormatExceptions。但是,当我创建一个测试类并输入一个字符串并按 Enter 时,例如“abc 123”,它不会产生通常情况下的输出。

更新:我已更改代码以使用字符串数组标记,但是现在使用“123 abc X12”的 toString() 方法会给出空指针异常。当我将“123 abc”放入构造函数中时它会起作用

更新:似乎现在可以工作,忘记初始化 arrayList

    import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class Student extends UniversityPerson{
private String studentNumber="";
private List<String> courses=new ArrayList<String>();
private String studentName="";

public int checkNoofletters(char[] chararray){
int noofletters=0;
for (char c:chararray){
if (Character.isLetter(c)){
noofletters++;
}
}
return noofletters;
}
public String courseListinStr(){
String stringo="";
for (String c:courses){
stringo+=c;
stringo+=" ";
}
return stringo;
}

public Student(Scanner scanner) throws IncorrectFormatException{
int studentNumberCount=0;
int studentNameCount=0;

Scanner s=scanner;
String input=s.nextLine();
String[] tokens=input.split("\\s");

for (int i=0; i<tokens.length; i++){
char[] chars=tokens[i].toCharArray();

if (checkNoofletters(chars)==chars.length){//if the number of letters is equal to the character length
if (studentNameCount==1){throw new IncorrectFormatException("Can only have 1 student name");}
studentNameCount++;
this.studentName=tokens[i];
continue;
}
if (tokens[i].matches("[0-9]+")){//add to the studentNumbers list
if (studentNumberCount==1){throw new IncorrectFormatException("Can only have 1 student number");}
studentNumberCount++;
this.studentNumber=tokens[i];

continue;
}

if (!tokens[i].startsWith("X")){
throw new IncorrectFormatException("Course code must start with an 'X'");
}

System.out.println(tokens[i]);
courses.add(tokens[i]);

}

if (studentNumber=="" || studentName==""){
throw new IncorrectFormatException("Must have 1 student Number and Student Name");
}

}


@Override
public String toString() {
//return String.format("%s %s", studentName,courseListinStr());
return String.format("Student: %s %s", studentName,studentNumber);
}

@Override
public boolean equals(Object o) {
// TODO Auto-generated method stub
return false;
}



}

最佳答案

最好的方法是做这样的事情:

Scanner s=scanner;
String input = s.nextLine();
String[] tokens=input.split("\\s");

现在您可以测试所有条件:

if (tokens.size() < yourNumber) throw new Exception("add here");
if (tokens[2].charAt(0)!='X') throw new Exception("add here");

等等;根据您的要求创建学生对象应该相当容易。

关于java - 使用 Scanner 类读取扫描仪字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31762537/

25 4 0
文章推荐: java - 在计算阶乘时,即使使用 long 和 double,我也会得到垃圾值
文章推荐: java - if 或语句 xml 和 java 控制台输出
文章推荐: java - 从 ArrayList 转换为 ArrayList 类会引发错误,而从 Object 转换为 Custom 则不会