我编写了一些代码,通过检查每个字段与一些正则表达式来验证逗号分隔文件的内容 - 导致我悲伤的特定正则表达式是一个非常基本的日期正则表达式(\\d{2}/\\d{2}/\\d{2}
)。如果该字段中的数据不匹配,则应该写出一个单独的文件,表明需要对其进行检查,如下所示:
private static int DATE_FIELD = 5;
File input = new File("input.txt");
Pattern p = Pattern.compile("\\d{2}/\\d{2}/\\d{2}");
BufferedReader reader = new BufferedReader(new FileReader(input));
String line = reader.readLine();
while(line != null){
String[] splitLine = line.split(",");
Matcher m = p.matcher(splitLine[DATE_FIELD]);
if(!m.matches) {
// write warning to separate file
}
line = reader.readLine();
}
此代码是作为更大的JAR文件的一部分编译的,该文件安装在办公室的4台计算机上(我和其他3台)。 jar文件通过由单独程序进行的shell调用来调用,并传入相关参数。在我们将数据导入数据库之前,这是QC检查的一部分,并且日期是必填字段,因此如果日期字段留空,则应标记为要审核。
我使用的正则表达式不应该允许空白日期传递,当我在我的机器上运行它时,它正确地标记了缺少的日期。但是,在我的同事机器上,空白日期在某种程度上没有被标记,好像根本没有检查字段,这导致文件被导入数据库时有点悲伤。
换句话说,我们的机器之间存在一些差异,导致代码在他们的机器上执行不正确,而不是我的。所有机器都有Java 8(不确定哪个版本,但它们应该都是相同的版本)。怎么可能?
答案 0 :(得分:2)
FileReader