简体   繁体   English

Java语法突出显示不匹配的字符

[英]Java syntax highlighting mismatched char

I'm implementing a syntax highlighting by reusing the code posted here . 我正在通过重用此处发布的代码实现语法高亮显示。 The problem is that each char "{,},<,>" is not coloured it is not followed by a non-char. 问题在于每个字符“ {,},<,>”都没有着色,并且后面没有非字符。 For example in " 例如在“

@Override
    public void insertString (int offset, String str, AttributeSet a) throws BadLocationException 
      {
            super.insertString(offset, str, a); 
            String text = getText(0, getLength());
            int before = findLastNonWordChar(text, offset);
            if (before < 0) before = 0;
            int after = findFirstNonWordChar(text, offset + str.length());
            int wordL = before;
            int wordR = before;                               
            while (wordR <= after) {
                if (wordR == after || String.valueOf(text.charAt(wordR)).matches("\\W")) {
                    if (text.substring(wordL, wordR).matches("(\\W)*(SELECT|WHERE)"))
                        setCharacterAttributes(wordL, wordR - wordL, attr, false);
                    else if (text.substring(wordL, wordR).matches("(\\W)*(\\{|\\}|\\<|\\>)"))
                      setCharacterAttributes(wordL, wordR - wordL, attrRed, false);
                    else
                        setCharacterAttributes(wordL, wordR - wordL, attrBlack, false);
                    wordL = wordR;
                }
                wordR++;
            }
        }
private int findLastNonWordChar (String text, int index) {
        while (--index >= 0) {
        if (String.valueOf(text.charAt(index)).matches("\\W")) {
            break;
        }
    }
    return index;
}
private int findFirstNonWordChar (String text, int index) {
    while (index < text.length()) {
        if (String.valueOf(text.charAt(index)).matches("\\W")) {
            break;
        }
        index++;
    }
    return index;
}

To match angle brackets in Java 8 regular expressions, you must use 要匹配Java 8正则表达式中的尖括号,必须使用

    .*

So use: 因此使用:

    .matches("<.*") 

matches a single angle bracket. 与单个尖括号匹配。 Combine this with the regular expression you already have to get a single angle bracket, WITHOUT the double backslash (\\). 将此与正则表达式结合使用,您已经必须获得一个尖括号,而无需使用双反斜杠(\\)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM