-1

我的任务有问题。正在发生的事情是正在读取一个文件,该文件读取数字并验证它们是否是正确的值。其中一个值包含一个字母,我试图让我的程序检测到它并保存不应该存在的总值。这是代码。我正在将数据读取为字符串,然后将字符串转换为要比较的双精度。我想验证读入的字符串是否都是数字,然后保存该值以备后用。那有意义吗?例如,数字必须介于 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)
4

2 回答 2

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
于 2014-03-09T00:21:46.260 回答
1

因为您在文件上使用 Scanner,所以 Scanner 实际上可以通过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 的主要原因。

于 2014-03-09T00:43:07.740 回答