[英]Get the word start and end position
因此,我试图根据单词突出显示文本视图,但我的代码无法正常工作我想要做的是“Hello world”,这两个单词都有不同的颜色,但对我来说,只有 hello 部分被突出显示
SpannableString spannableString = new SpannableString(all_folder.get(position).getAudioChineseText());
String spannableword = all_folder.get(position).getAudioChineseText();
String[] splitStr = spannableword.split("\\s+");
int end = 0;
for (int i = 0; i < splitStr.length; i++) {
end = splitStr[i].length() + i;
int start=splitStr[i].length()+1;
textcolor(holder.textChines, spannableString, i, end, all_folder.get(position).getSpeechResponse());
}
textcolour 方法工作正常,但 position 没有正确通过任何想法我做错了什么,因为我需要通过单词的开始和结束 position
您可以使用String#lastIndexOf
和String#indexOf
来获取跨度索引。 下面是一个例子。
private SpannableString getSpanString(String text){
SpannableString spannableString = new SpannableString(text);
int startIndex1= 0;
int endIndex1= text.indexOf(" ");
int startIndex2= text.lastIndexOf(" ");
int endIndex2 = text.length();
spannableString.setSpan(new ForegroundColorSpan(Color.RED), startIndex1, endIndex1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(Color.BLUE), startIndex2, endIndex2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return spannableString;
}
当然,您需要先处理这里的边缘情况。 就像字符串只有一个单词或其空白但想法保持不变。 在方法的开头添加边缘情况后试一试。 此外,您必须在使用前修剪字符串。
如果您想要原始字符串中的位置,请不要使用split()
,而是使用find()
循环。
String spannableword = "Hello World";
Matcher m = Pattern.compile("\\S+").matcher(spannableword);
while (m.find()) {
String str = m.group();
int start = m.start();
int end = m.end();
System.out.printf("Found word (%d - %d): '%s'%n", start, end, str);
}
Output
Found word (0 - 5): 'Hello'
Found word (6 - 11): 'World'
注意使用的正则表达式是\\S+
,与拆分正则表达式\\s+
相反。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.