我的目标是实现用户写入JTextPane的关键字的蓝色着色.这就是我的代码的样子:
private class DocumentHandler implements DocumentListener {
@Override
public void changedUpdate(DocumentEvent ev) {
}
@Override
public void insertUpdate(DocumentEvent ev) {
highlight();
}
@Override
public void removeUpdate(DocumentEvent ev) {
highlight();
}
private void highlight() {
String code = codePane.getText();
SimpleAttributeSet defSet = new SimpleAttributeSet();
StyleConstants.setForeground(defSet, Color.BLACK);
doc.setCharacterAttributes(0, code.length(), defSet, true);
SimpleAttributeSet set = new SimpleAttributeSet();
StyleConstants.setForeground(set, Color.BLUE);
for (String keyword : keywords) {
Pattern pattern = Pattern.compile(keyword + "(\\[\\])*");
Matcher matcher = pattern.matcher(code);
while (matcher.find()) {
//Just for test
System.out.print("Start index: …Run Code Online (Sandbox Code Playgroud) 我有JTextPane,其中"int"字为蓝色.这样的正则表达式是错误的,因为它也会着色"打印":
int + "(\\[\\])*" //To match eg. int[]
Run Code Online (Sandbox Code Playgroud)
所以我想到了这样的正则表达式:
"\\s" + int + "(\\[\\])*"
Run Code Online (Sandbox Code Playgroud)
没关系,但如果用户在文本窗格中将int作为第一个键入,则无效.如何解决这个问题呢?是否有一些符号为NOTHING?所以我可以做:\ s | 没有