Sta*_*tar 9 java regex android matcher pattern-matching
String text = "Cámélan discovered ônte red ale?t \n Como se extingue la deuda";
Run Code Online (Sandbox Code Playgroud)
如果我给出输入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;
}
Run Code Online (Sandbox Code Playgroud)
在另一堂课上,
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;
}
Run Code Online (Sandbox Code Playgroud)
viewHolder.mTextView.setText(createHighlightedString((node.getText()),mHighlightColor));
但是我得到的输出是,
如果我单独输入单个字母o,它会突出显示,但如果我传递两个以上的字母表,例如:Ca,它不会突出显示.我无法弄清楚我在做什么错.
但如果你看看WhatsApp.它已经实现了.
我键入了Co,它识别并突出显示句子中的重音字符.
你已经得到了:
\n\nprivate String convertToBasicLatin(String text) {\n return Normalizer.normalize(text, Normalizer.Form.NFD)\n .replaceAll("\\\\p{M}", "").replaceAll("\\\\R", "\\n");\n}\nRun Code Online (Sandbox Code Playgroud)\n\n为了使一个不带重音的基本拉丁字符与带重音的字母的一个Unicode 代码点相匹配,\none 不应将 标准化为组成的形式:
\n\nprivate String convertToComposedCodePoints(String text) {\n return Normalizer.normalize(text, Normalizer.Form.NFC).replaceAll("\\\\R", "\\n");\n}\nRun Code Online (Sandbox Code Playgroud)\n\n一般来说,人们可能会假设 Unicode 代码点也是 1 个字符长。
\n\nstart现在,和的匹配器索引位置end是正确的。\n我将显式行结尾(正则表达式\\R)规范化为单个或。\n无法规范化为小写/大写,因为字符数可能会有所不同:\n德语小写对应于大写\\r\\n\\u0085\\n\xc3\x9fSS。
String sought = ...;\nString content = ...;\n\nsought = convertToBasicLatin(sought);\nString latinContent = convertToBasicLatin(content);\nString composedContent = convertToComposedUnicode(content);\n\nMatcher m = Pattern.compile(sought, Pattern.CASE_INSENSITIVE\n | Pattern.UNICODE_CASE | Pattern.UNICODE_CHARACTER_CLASS\n | Pattern.UNIX_LINES)\n .matcher(latinContent);\nwhile (m.find()) {\n ... // One can apply `m.start()` and `m.end()` to composedContent of the view too.\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
573 次 |
| 最近记录: |