我在完成作业时遇到了麻烦。发生的事情是正在读取的文件读取数字并验证它们是否正确值。其中一个值包含一个字母,我试图让我的程序检测到并保存不应该存在的总值。这是代码。我将数据作为字符串读取,然后将字符串转换为双精度数据进行比较。我想验证读入的字符串是否都是数字,然后保存该值以供以后使用。那有意义吗?例如,数字必须在0到99999之间,并且一个值是573S1,由于它包含S,因此它不起作用。我想保存该值573S1以便稍后从文件中作为错误打印在代码中。
public static void validateData() throws IOException{
File myfile = new File("gradeInput.txt");
Scanner inputFile = new Scanner(myfile);
for (int i=0; i<33; i++){
String studentId = inputFile.next();
String toBeDouble = studentId;
Double fromString = new Double(toBeDouble);
if (fromString<0||fromString>99999){
System.out.println();
}
非常感谢任何帮助。非常感谢!
编辑:如果我尝试运行程序,这就是我得到的。
Exception in thread "main" java.lang.NumberFormatException: For input string: "573S1"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
at java.lang.Double.valueOf(Double.java:475)
at java.lang.Double.<init>(Double.java:567)
at Paniagua_Grading.validateData(Paniagua_Grading.java:23)
at Paniagua_Grading.main(Paniagua_Grading.java:6)
答案 0 :(得分:1)
您可以尝试类似下面的方法,它将检查字符串是否只包含数字 -
private static boolean onlyDigits(String in) {
if (in == null) {
return false;
}
for (char c : in.toCharArray()) {
if (Character.isDigit(c)) {
continue;
}
return false;
}
return true;
}
public static void main(String[] args) {
System.out.println(onlyDigits("123"));
System.out.println(onlyDigits("123A"));
}
输出
true
false
答案 1 :(得分:1)
由于您在文件上使用扫描仪,因此扫描仪实际上可以通过hasNextDouble
告诉您这些信息。
while(inputFile.hasNext()) {
if(inputFile.hasNextDouble()) {
// the next token is a double
// so read it as a double
double d = inputFile.nextDouble();
} else {
// the next token is not a double
// so read it as a String
String s = inputFile.next();
}
}
这种便利是首先使用Scanner的主要原因。