阅读弦乐

时间:2014-03-09 00:11:18

标签: java string double validating

我在完成作业时遇到了麻烦。发生的事情是正在读取的文件读取数字并验证它们是否正确值。其中一个值包含一个字母,我试图让我的程序检测到并保存不应该存在的总值。这是代码。我将数据作为字符串读取,然后将字符串转换为双精度数据进行比较。我想验证读入的字符串是否都是数字,然后保存该值以供以后使用。那有意义吗?例如,数字必须在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)

2 个答案:

答案 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的主要原因。