Java 这是解析字符串的好方法吗?

Java 这是解析字符串的好方法吗?,java,parsing,Java,Parsing,我的程序从纯文本文件中读取行,行的格式为:;%n,其中是分隔符。它将两个解析的整数与其他两个已知值进行比较,如果匹配,则增量为tallyaray[i] 我目前使用: try { scan = new Scanner(new BufferedReader(new FileReader("LogFileToBeRead.txt"))); for (int i = 0; i < tallyArraySize; i++) { explodedLogLine = s

我的程序从纯文本文件中读取行,行的格式为:
;%n
,其中
是分隔符。它将两个解析的整数与其他两个已知值进行比较,如果匹配,则增量为
tallyaray[i]

我目前使用:

try {
    scan = new Scanner(new BufferedReader(new FileReader("LogFileToBeRead.txt")));

    for (int i = 0; i < tallyArraySize; i++) {
        explodedLogLine = scan.nextLine().split(";");

        if (IntReferenceVal1 == Integer.parseInt(explodedLogLine[0]) && IntReferenceVal2 == Integer.parseInt(explodedLogLine[1])) {
           tallyArray[i]++;
        }
    }
} finally {
    if (scan != null) { scan.close(); }
}
试试看{
扫描=新的扫描仪(新的BufferedReader(新的文件阅读器(“LogFileToBeRead.txt”));
对于(int i=0;i
我想知道这种方法是否有严重的错误。它不需要考虑产品质量

还有,有没有一种标准的方法来解析这样的字符串


编辑:我们可以假设文本文件的格式是完美的。但是我看到了解释可能的异常的重要性。

根据我的说法,该程序有三个缺陷

  • 分隔符
    如果存在意外删除或意外添加的分隔符,该怎么办
  • 应该检查
    explodedLogLine
    的长度是否为
    2
    ,并且它不是
    null
    ,否则将导致意外的运行时错误
  • 您应该捕获
    NumberFormatException
    格式异常,因为您永远无法确保输入总是一个数字
  • 下面一个简单的例子可以让你知道事情会如何发展

        String str = "3;;3";
        System.out.println(Arrays.toString(str.split(";")));
    

    此代码将打印
    [3,3]
    ,在这种情况下,您的程序将生成
    NumberFormatException
    ,因为
    字符串无法解析为整数。

    您没有处理
    Integer.parseInt()
    方法调用引发的
    NumberFormatException
    。如果有一行错误,执行将退出for循环

    您没有检查正在读取的文件的完整性。如果没有
    字符,或者如果字符串实际上不是数字,则执行只会退出您发布的代码块


    如果您可以假设文件的格式是完美的,并且已设置为使用扫描仪,则可以添加
    作为扫描仪的分隔符:

    scan = new Scanner(new BufferedReader(new FileReader("LogFileToBeRead.txt")));
    scan.useDelimiter(Pattern.compile("(;|\\s)"));
    
    for (int i = 0; i < tallyArraySize; i++) {
        int ref1 = scan.nextInt();
        int ref2 = scan.nextInt();
    
        if (IntReferenceVal1 == ref1 && 
            IntReferenceVal2 == ref2) {
           tallyArray[i]++;
        }
    }
    
    scan=newscanner(newbufferedreader(newfilereader(“LogFileToBeRead.txt”));
    scan.useDelimiter(Pattern.compile(“(;| \\s)”);
    对于(int i=0;i

    只需为每行调用
    Scanner.nextInt()
    两次。

    似乎大多数不好的方面都来自于没有处理可能的错误。我的问题更多的是关于解析整数的方法。感谢您提供scan.nextInt()函数。这更符合我的要求!