我有一个名为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);
}
答案 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个星球*