gpt4 book ai didi

java - 给定字符串中的混合重音字符和普通字符在搜索时在 Java 中不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:15 24 4
gpt4 key购买 nike

String text = "Cámélan discovered ônte red aleŕt \n Como se extingue la deuda";

如果我给出输入 Ca,它应该从给定的字符串 Cá 中突出显示,但它没有突出显示。

下面是我试过的。

 Pattern mPattern; 
String filterTerm; //this is the input which I give from input filter. Say for eg: Ca
String regex = createFilterRegex(filterTerm);
mPattern = Pattern.compile(regex);

private String createFilterRegex(String filterTerm) {
filterTerm = Normalizer.normalize(filterTerm, Normalizer.Form.NFD);
filterTerm = filterTerm.replaceAll("[\\p{InCombiningDiacriticalMarks}]", "");
return filterTerm;
}

public Pattern getPattern() {
return mPattern;
}

在另一个类(class),

private SpannableStringBuilder createHighlightedString(String nodeText, int highlightColor) { //nodeText is the entire list displaying. 
SpannableStringBuilder returnValue = new SpannableStringBuilder(nodeText);
String lowercaseNodeText = nodeText;
Matcher matcher = mFilter.getPattern().matcher((createFilterRegex(lowercaseNodeText)));
while (matcher.find()) {
returnValue.setSpan(new ForegroundColorSpan(highlightColor), matcher.start(0),
matcher.end(0), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}

return returnValue;
}

viewHolder.mTextView.setText(createHighlightedString((node.getText()), mHighlightColor));

但是我得到的输出是,

如果我单独输入单个字母 o,它会突出显示,但如果我输入两个以上的字母,例如:Ca,它不会突出显示。我不知道我在做什么错误。

但如果您查看 WhatsApp。它已经实现了。

我输入了 Co,它正在识别并突出显示句子中的重音字符。

enter image description here

最佳答案

正如你所说,

String text = "Cámélan discovered ônte red aleŕt\n Como se extingue la deuda";

因此,每当您给出第一个输入时,接收第一个字符并进行比较。

例如:如果你给Ca,那么

if (StringUtils.isNotEmpty(substring)) { //this is the search text
substring=substring.substring(0,1); //now you get C alone.

因此,无论您键入什么,它都会通过过滤第一个字符来显示。现在

 SpannableString builder = higlightString((yourContent.getText()), mHighlightColor);
viewHolder.mTextView.setText(builder);




private SpannableString higlightString(String entireContent, int highlightColor) {
SpannableString returnValue = new SpannableString(entireContent);

String lowercaseNodeText = entireContent;
try {
Matcher matcher = mFilter.getPattern().matcher(((diacritical(lowercaseNodeText.toLowerCase()))));
while (matcher.find()) {
returnValue.setSpan(new ForegroundColorSpan(highlightColor), matcher.start(0),
matcher.end(0), Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
}
catch (Exception e){
e.printStackTrace();
}

return returnValue;

}



private String diacritical(String original) {
String removed=null;
String decomposed = Normalizer.normalize(original, Normalizer.Form.NFD);
removed = decomposed.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
return removed;
}

测试用例:

当你输入 Ca 时,它通过显示所有 C 内容进入整个文本获取所有数据并通过规范化内容过滤掉它也与重音字符匹配并通过突出显示显示。

关于java - 给定字符串中的混合重音字符和普通字符在搜索时在 Java 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52835775/

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