java - 指出未满足行格式错误的条件
问题描述
我有一个程序可以读取文件并在每一行中强制执行某种格式。如果一行有格式错误,它会在其下方打印一行,指示它是哪个错误。
对于每一行,从第 1 列到第 13 列和第 77 列到第 80 列,没有强制执行格式规则,所以我不关心这些列中的点。
对于点字符的情况,每个点前面不能有空格,后面必须有空格。
我有一个条件来检查这个,乍一看似乎是对的,但它仍然没有捕捉到点格式的错误。
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 行下面应该有一条错误消息,因为它们的最后一个点前面有一个空格。
(如果您想知道“嘿,最后一段代码不是 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
不超过数组长度。
推荐阅读
- excel - 如何复制/复制用户窗体
- html - 有没有办法只使用 CSS 和 HTML 来绘制形状?
- javascript - 修改输入值时如何防止光标移动?
- python - html通过python提交
- awk - 仅当它以`.local`结尾时才使用awk在文件第二行的第二列上打印单词?
- javascript - 为什么 HTML 画布有 2 种不同的尺寸?
- reactjs - 在 React 中显示传递给子组件的状态内容
- python - 如何在 Spyder 中使用 IPython 控制台运行 python 脚本?
- spring-cloud - 春季云数据流服务器上的 kubernetes 仪表板加载错误
- celery - 每个 Kombu “运输”都是有效的 Celery “经纪人”吗?这两个概念有什么关系?