指出 Error in line formatting not being met 的条件
Condition to point out Error in line formatting not being met
我有一个程序可以读取文件并在每一行中强制执行特定格式。如果某行有格式错误,它会在其下方打印一行,指出是哪个错误。
对于每一行,从第 1 列到第 13 列以及第 77 列到第 80 列,没有强制执行格式规则,所以我不关心这些列中的点。
对于点字符的情况,每个点前面不能有白色space,后面必须有白色space。
我有一个条件要检查这个,乍一看似乎是正确的,但它仍然没有捕捉到点格式的错误。
public static boolean checkLineFormatErrors(String line){
int errorCount;
if(line.contains(".")){
errorCount = 0;
char[] charArr = line.toCharArray();
boolean problemWithDot = false;
for(int i = 0; i < charArr.length;i++){
if(i < charArr.length - 1
&& i > 12 && i < 76
&& charArr[i] == '.' && (charArr[i-1] == ' ' || charArr[i+1] != ' ')){
problemWithDot = true;
break;
}
}
if(problemWithDot){
errorMessage = "One or more dots do not follow the line format for this file.";
errorCount++;
if(errorCount > 1){
System.out.println(errorMessage);
}
else{
System.out.println(line + errorMessage);
}
}
}
return problemWithDot
}
我用于捕获其他符号格式错误的所有其他方法都有效,只有点号没有。
例如
00012 ENVIRONMENT DIVISION .
00013 DATA DIVISION.
00014 WORKING-STORAGE SECTION.
00015 77 NUMERO1 PIC 9(2) VALUE ZEROS .
第 12 行和第 15 行下面应该有一条错误消息,因为它们的最后一个点前面有 space。
(如果你想知道“嘿,最后一点代码不是 Cobol 吗??你为什么不添加一个 cobol 标签?”是的,最后几行是 cobol!这不是一个 cobol 问题,因为程序检查错误仅在 Java 中进行。Cobol 只是一种测试文件以执行其规则的方法。)
通过修复你的循环,它起作用了,主要问题在于
i < charArr.length - 1
当dot
结束时
for(int i = 12; i < charArr.length && i < 76;i++)
{
if(charArr[i] == '.' && (charArr[i-1] == ' ' ||
charArr[Math.min(charArr.length -1, i+1)] != ' '))
{
problemWithDot = true;
break;
}
}
注意
charArr[i+1] != ' '
可能会导致问题,因此请检查 i + 1
是否不超过数组长度。
我有一个程序可以读取文件并在每一行中强制执行特定格式。如果某行有格式错误,它会在其下方打印一行,指出是哪个错误。
对于每一行,从第 1 列到第 13 列以及第 77 列到第 80 列,没有强制执行格式规则,所以我不关心这些列中的点。
对于点字符的情况,每个点前面不能有白色space,后面必须有白色space。
我有一个条件要检查这个,乍一看似乎是正确的,但它仍然没有捕捉到点格式的错误。
public static boolean checkLineFormatErrors(String line){
int errorCount;
if(line.contains(".")){
errorCount = 0;
char[] charArr = line.toCharArray();
boolean problemWithDot = false;
for(int i = 0; i < charArr.length;i++){
if(i < charArr.length - 1
&& i > 12 && i < 76
&& charArr[i] == '.' && (charArr[i-1] == ' ' || charArr[i+1] != ' ')){
problemWithDot = true;
break;
}
}
if(problemWithDot){
errorMessage = "One or more dots do not follow the line format for this file.";
errorCount++;
if(errorCount > 1){
System.out.println(errorMessage);
}
else{
System.out.println(line + errorMessage);
}
}
}
return problemWithDot
}
我用于捕获其他符号格式错误的所有其他方法都有效,只有点号没有。
例如
00012 ENVIRONMENT DIVISION .
00013 DATA DIVISION.
00014 WORKING-STORAGE SECTION.
00015 77 NUMERO1 PIC 9(2) VALUE ZEROS .
第 12 行和第 15 行下面应该有一条错误消息,因为它们的最后一个点前面有 space。
(如果你想知道“嘿,最后一点代码不是 Cobol 吗??你为什么不添加一个 cobol 标签?”是的,最后几行是 cobol!这不是一个 cobol 问题,因为程序检查错误仅在 Java 中进行。Cobol 只是一种测试文件以执行其规则的方法。)
通过修复你的循环,它起作用了,主要问题在于
i < charArr.length - 1
当dot
结束时
for(int i = 12; i < charArr.length && i < 76;i++)
{
if(charArr[i] == '.' && (charArr[i-1] == ' ' ||
charArr[Math.min(charArr.length -1, i+1)] != ' '))
{
problemWithDot = true;
break;
}
}
注意
charArr[i+1] != ' '
可能会导致问题,因此请检查 i + 1
是否不超过数组长度。