1

クライアント側から送信された修正メッセージのエラーを強調表示しようとしています。ただし、そうすると、このアルゴリズムには従いません。単なる文字列である修正メッセージにエラーがある場合、文字列全体が強調表示されます。それ以外の場合は、強調表示されないままになります。基本的に私が求めているのは、エラーが発生したときに出力全体を強調表示するのではなく、複数の部分を強調表示するにはどうすればよいですか?

例:私が得ているエラー

no error - unhighlighted
error - highlighted
no error - highlighted
no error - highlighted
no error - highlighted
error - highlighted

私が欲しいもの:

no error - unhighlighted
error - highlighted
no error - unhighlighted
no error - unhighlighted
no error - unhighlighted
error - highlighted

問題領域

if(outputLine.equals("No errors")) {
    tfCSVLine.append(outputLine+"\n\n\n");
    lengthH += (inputLine+"\n\n\n").length();
}
else {
    tfCSVLine.append(outputLine+"\n\n\n");
    int pos = inputLine.indexOf(inputLine, 0);
    int len = lengthH;
    lengthH += (inputLine+"\n\n\n").length();
    h.addHighlight(len, lengthH+(inputLine+"\n\n\n").length(),
                                DefaultHighlighter.DefaultPainter);
}

プログラム

Highlighter h =  tfFIXMsg.getHighlighter();
try {             
    int lengthH = 0;
    while ((inputLine = in.readLine()) != null) { 
        System.out.println ("Server: " + inputLine); 
        tfFIXMsg.append( inputLine + "\n\n\n");

        if (inputLine.trim().equals("Bye.")) {
            System.out.println("Exit program"); 
            break;
        }

        Scanner input1 = new Scanner(new File(csvName));
        Scanner input2 = new Scanner(new File(csvName));
        Scanner input3 = new Scanner(new File(csvName));
        Scanner input4 = new Scanner(new File(csvName));

        String csvline = getCsvLineVal(getLocation34CSV(
                getTag34Value(Tag34Location(getTagCSV(parseFixMsg(
                    inputLine ,inputLine))), getValueCSV( parseFixMsg(
                        inputLine ,inputLine))), getVal34(input1,input2)),
                                            getCSVLine( input3,  input4) );
        outputLine = compareClientFixCSV( getTagCSV(parseFixMsg(
                inputLine ,inputLine)), getValueCSV(parseFixMsg(
                    inputLine ,inputLine)), getCSVTag(csvline), getCSVValue(csvline));

        out.println(outputLine);

        if(outputLine.equals("No errors")) {
            tfCSVLine.append(outputLine+"\n\n\n");
            lengthH += (inputLine+"\n\n\n").length();
        }
        else {
            tfCSVLine.append(outputLine+"\n\n\n");
            int pos = inputLine.indexOf(inputLine, 0);
            int len = lengthH;
            lengthH += (inputLine+"\n\n\n").length();
            h.addHighlight(len, lengthH+(inputLine+"\n\n\n").length(),
                                    DefaultHighlighter.DefaultPainter);
        }

        input1.close();
        input2.close();
        input3.close();
        input4.close();
}
4

1 に答える 1

2

(inputLine+"\n\n\n").length()lengthH に 2 回追加しています。一度だけやればいいじゃないですか。また、「else」ブロックの実行時に lengthH が適切に初期化されているように見えませんか?

于 2013-08-09T00:27:46.727 に答える