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()函数。这更符合我的要求!