英文:
How to replace text using ReplaceFirst() without case sensitivity
问题
我正在尝试创建一个方法,根据用户输入的搜索文本在 jlabel
中突出显示文本。除了区分大小写外,它的功能很好。我使用了正则表达式 (?i)
来忽略大小写。但是它仍然区分大小写。
private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {
String SourceText = "this is a sample text";
String SearchText = jTextField1.getText();
if (SourceText.toLowerCase().contains(SearchText.toLowerCase())) {
String OutPut = "<html>" + SourceText.replaceFirst("(?i)" + SearchText, "<span style=\"background-color: #d5f4e6;\">"
+ SearchText + "</span>") + "</html>";
jLabel1.setText(OutPut);
} else {
jLabel1.setText(SourceText);
}
}
更新
contains
方法是区分大小写的。
如何以 Java 中不区分大小写的方式检查一个字符串是否包含另一个字符串
英文:
I'm trying to create a method which can highlight text in a jlabel
according user entered search text. it works fine except it case sensitive. I used a regex (?i)
to ignore case. But still it case sensitive.
private void jTextField1KeyReleased(java.awt.event.KeyEvent evt) {
String SourceText = "this is a sample text";
String SearchText = jTextField1.getText();
if (SourceText.contains(SearchText)) {
String OutPut = "<html>" + SourceText.replaceFirst("(?i)" + SearchText, "<span style=\"background-color: #d5f4e6;\">" + SearchText + "</span>") + "</html>";
jLabel1.setText(OutPut);
} else {
jLabel1.setText(SourceText);
}
}
How can i fix this.
Update
contains
is case sensitive.
How to check if a String contains another String in a case insensitive manner in Java
答案1
得分: 1
你在替换中没有使用匹配的文本,而是在替换中硬编码了与搜索中使用的相同字符串。由于您使用 html
标签包装整个匹配,您需要在替换中使用 $0
回引(它指的是位于第 0 组的整个匹配)。
此外,您没有对搜索词进行转义(使用 "
进行引用),如果 SearchText
包含特殊的正则表达式元字符,可能会引发问题。
您可以使用以下代码来修复:
String OutPut = "<html>" + SourceText.replaceFirst("(?i)" + Pattern.quote(SearchText), "<span style=\"background-color: #d5f4e6;\">$0</span>") + "</html>";
英文:
You have not used the matched text in the replacement, you hard-coded the same string you used in the search. Since you wrap the whole match with html
tags, you need to use the $0
backreference in the replacement (it refers to the whole match that resides in Group 0).
Besides, you have not escaped ("quoted") the search term, it may cause trouble if the SearchText
contains special regex metacharacters.
You can fix the code using
String OutPut = "<html>" + SourceText.replaceFirst("(?i)" + Pattern.quote(SearchText), "<span style=\"background-color: #d5f4e6;\">$0</span>") + "</html>";
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论