Java 用于指出不符合行格式设置的错误的条件

Java 用于指出不符合行格式设置的错误的条件,java,string,format,string-formatting,Java,String,Format,String Formatting,我有一个程序,它读取一个文件,并在每一行强制执行某种格式。如果一行有格式错误,它会在其下方打印一行,指明错误所在 对于从第1列到第13列和第77列到第80列的每一行,都不强制执行任何格式规则,因此我不关心这些列中的点 对于点字符,每个点的前面不能有空格,后面必须有空格 我有一个条件来检查这一点,乍一看它似乎是正确的,但它仍然没有捕捉到点格式中的错误 public static boolean checkLineFormatErrors(String line){ int errorCount;

我有一个程序,它读取一个文件,并在每一行强制执行某种格式。如果一行有格式错误,它会在其下方打印一行,指明错误所在

对于从第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
}
第12行和第15行下面应该有一条错误消息,因为它们的最后一个点前面有一个空格


(如果您想知道“嘿,这不是Cobol的最后一段代码吗?为什么不添加Cobol标记?”是的,最后几行是Cobol!这不是Cobol的问题,因为检查错误的程序仅用Java编写。Cobol只是测试文件以执行其规则的一种方法。)

通过修复循环,它可以工作,主要问题在于

i < charArr.length - 1 
注意


charArr[i+1]!='
可能会导致问题,因此请检查
i+1
是否超过数组长度。

如果一个点位于行的末尾,它将位于
i==charArray.length-1
;您的
i
条件排除了这种情况,因此行尾的点(看起来您所有的点都是)永远不会被检查。我试图实现这一点,但现在每一行都被标记为有错误。我相信问题是,我现在说的是,最后一个点后面必须有一个空格,显然我的点都没有。所以我试着改变它,要么点前面没有空格,要么点后面没有空格或换行符。它仍然用一个点标记每一行是错误的<代码>charArr[i]='.&(charArr[i-1]=''.| |(charArr[Math.min(charArr.length-1,i+1)]!='&(charArr[Math.min(charArr.length-1,i+1)]!='\n')我通过更改最后一个
charArr[Math.min(charArr.length-1,i+1)]!='\n'
to
charArr[Math.min(charArr.length-1,i+1)]!='
i < charArr.length - 1 
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;
   }
}