听起来您正在寻找一种通用的格式化选项,我可以向您推荐正则表达式吗?您可以使用正则表达式进行各种不同类型的匹配。我在下面写了一个简单的例子[对于所有那些正则表达式专家,如果我没有使用完美的表达式,请怜悯我;)]。您可以将 REGEX 和 MAX_LINES_TO_READ 常量放入属性文件中并对其进行修改以使其更加通用。
您基本上会测试“.txt”文件的最大行数(但是需要很多行才能建立良好的格式 - 您也可以使用正则表达式作为标题行,或者根据需要执行多个不同的正则表达式来测试格式),如果所有这些行都匹配,则该文件将被标记为“有效”。
这只是您可能运行的一个示例。您应该实施适当的异常处理,而不仅仅是捕获“异常”。
为了测试 Java 中的正则表达式,http://www.regexplanet.com/simple/index.html效果很好。
这是“ValidateTxtFile”源...
import java.io.*;
public class ValidateTxtFile {
private final int MAX_LINES_TO_READ = 5;
private final String REGEX = ".{15}[ ]{5}.{15}[ ]{5}[-]\\d{2}\\.\\d{2}[ ]{9}\\d{2}/\\d{2}/\\d{4}";
public void testFile(String fileName) {
int lineCounter = 1;
try {
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line = br.readLine();
while ((line != null) && (lineCounter <= MAX_LINES_TO_READ)) {
// Validate the line is formatted correctly based on regular expressions
if (line.matches(REGEX)) {
System.out.println("Line " + lineCounter + " formatted correctly");
}
else {
System.out.println("Invalid format on line " + lineCounter + " (" + line + ")");
}
line = br.readLine();
lineCounter++;
}
} catch (Exception ex) {
System.out.println("Exception occurred: " + ex.toString());
}
}
public static void main(String args[]) {
ValidateTxtFile vtf = new ValidateTxtFile();
vtf.testFile("transactions.txt");
}
}
这是“transactions.txt”中的内容......
Electric Electric Co. -50.99 12/28/2011
Food Food Store -80.31 12/28/2011
Clothes Clothing Store -99.36 12/28/2011
Entertainment Bowling -30.4393 12/28/2011
Restaurant Mcdonalds -10.35 12/28/11
我运行应用程序时的输出是...
Line 1 formatted correctly
Line 2 formatted correctly
Line 3 formatted correctly
Invalid format on line 4 (Entertainment Bowling -30.4393 12/28/2011)
Invalid format on line 5 (Restaurant Mcdonalds -10.35 12/28/11)
编辑 2011 年 12 月 29 日上午 10:00 左右
不确定这是否存在性能问题,但仅供参考,我多次复制“transactions.txt”中的条目以构建一个包含约 130 万行的文本文件,并且我能够通过在我的电脑上大约 7 秒即可完成整个文件。我将 System.out 更改为仅在无效 (524,288) 和有效 (786,432) 格式条目末尾显示总计计数。 “transactions.txt”大小约为 85mb。