gpt4 book ai didi

java - JTextField 中的 Stange unicode 行为

转载 作者:行者123 更新时间:2023-11-30 09:23:23 30 4
gpt4 key购买 nike

我正在编写一个 DocumentFilter,它将所有输入到 JTextField 中的单词“top”替换为逻辑顶部符号。

使用这段代码很好,但是它很烦人,因为用户必须重新键入他们的空格,他们可以这样做并且文本继续在同一行

temp.replaceAll("\\btop\\b", "\\\u22A4" );

使用此代码并在空格中添加替换项会导致顶部符号和 JTextField 中的所有文本在用户继续键入文本时略微向上推,然后转到下方并开始新行

temp.replaceAll("\\btop\\b", "\\\u22A4 " );

任何人都可以解释这种行为并希望提供解决方案吗?谢谢。

 @Override
public void replace(FilterBypass fb, int offset, int length,
String string, AttributeSet attr)
throws BadLocationException {
int totalLength = fb.getDocument().getLength();
String temp = fb.getDocument().getText(0, totalLength);
temp = temp.replaceAll("\\btop\\b", "\\\u22A4" ); //needs space
super.remove(fb, 0, totalLength);
super.insertString(fb, 0, temp, attr);
super.replace(fb, offset, length, string, attr);
}

最佳答案

我认为这可能是由于您将非空格字边界(例如换行符或回车符)替换为简单空格所致。所以文本的流向正在改变。

鉴于 \\b anchor 依赖于 \\w 字符类,您可以改为匹配并捕获 \\W “top”两边的非单词字符,然后将它们重新插入到结果中:

temp = temp.replaceAll("(\\W)top(\\W)", "$1\\\u22A4$2" );

这样您将捕获空格或换行符、回车符、制表符等,并将它们恢复到“top”替换的任一侧,以便文档保持完全相同,只是“top”已变为“⊤”。

关于java - JTextField 中的 Stange unicode 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069650/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com