Android尝试替换字符并更改单词的颜色

时间:2016-05-30 00:22:38

标签: java android android-activity

我有一个名为nota的字符串。有一些文字。我想要的是从它们之间包含* *的短语中更改特定单词的颜色。例如:那真是太棒了*。单词awesome应该是黄色,* *字符应该被删除(好像*是迷你Markdown格式)。我试过这段代码,但它没有用。我需要一些帮助。

 if(nota.contains("* *")){

 //nota = nota.replace("* *","");
 Pattern pattern = Pattern.compile("\\*.*\\*");
 Matcher matcher = pattern.matcher(nota);
 // Check all occurrences
 matcher.find();


 Spannable spannable = new SpannableString(nota);
 spannable.setSpan(
 //new ForegroundColorSpan(Color.YELLOW), nota.indexOf("* *"), nota.indexOf("* *") + "* *".length(),     Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
 new ForegroundColorSpan(Color.YELLOW), matcher.start() + 1 , matcher.end() - 1,     Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 txtnota.setText(spannable);
 }

2 个答案:

答案 0 :(得分:1)

我用这种方式解决了它:

if(nota != null){
        int firstIndex = nota.indexOf("*");
        if (firstIndex >= 0) {
            nota = nota.replaceFirst("[*]{1}", "");
            int secIndex = nota.indexOf("*");
            if (secIndex >= 0) {
                nota = nota.replaceFirst("[*]{1}", "");

                Spannable spannable = new SpannableString(nota);
                spannable.setSpan(new ForegroundColorSpan(Color.YELLOW), firstIndex, secIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                spannable.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD_ITALIC), firstIndex, secIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                txtnota.setText(spannable);
            }
        }
}  

答案 1 :(得分:0)

使用.Contains("* *")会检测以下字符串:

* * awesome!
Hello boy! * *
Hello* * boy!

但不是:

*awesome*

尝试将代码更改为:

if( nota.contains("*") && nota.replace("*","").contains("*") ){

 //nota = nota.replace("* *","");
 Pattern pattern = Pattern.compile("\\*.*\\*");
 Matcher matcher = pattern.matcher(nota);
 // Check all occurrences
 matcher.find()


 Spannable spannable = new SpannableString(nota);
 spannable.setSpan(
 //new ForegroundColorSpan(Color.YELLOW), nota.indexOf("* *"), nota.indexOf("* *") + "* *".length(),     Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
 new ForegroundColorSpan(Color.YELLOW), matcher.start() + 1 , matcher.end() - 1,     Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
 txtnota.setText(spannable);
 }

nota.replace("*","").contains("*")基本上做的是检查你是否有2个星球*