繁体   English   中英

获取单词开始和结束 position

[英]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#lastIndexOfString#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM