Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对{}大括号内的单词应用文本效果_Java_Android_Regex_Sqlite_Android Recyclerview - Fatal编程技术网

Java 如何对{}大括号内的单词应用文本效果

Java 如何对{}大括号内的单词应用文本效果,java,android,regex,sqlite,android-recyclerview,Java,Android,Regex,Sqlite,Android Recyclerview,我有从SQLite数据库到onBindViewHolder的文本,格式如下:你好,我是{Alex}。 我希望能够调整{}内文本的大小或颜色,并从输出中隐藏那些{}大括号。最后一个愿望是:你好,我是亚历克斯 这是我第一次遇到与Regex相关的事情,有谁能给我一个简短的循序渐进的指导,告诉我如何做到这一点 我发现了类似的问题: 但我不明白该如何处理“(?我不擅长正则表达式。但下面是对您的问题的回答,它将让您获得所需的结果(获取表达式文本并相应地设置格式) 因此,基本上我们将原始问题分为三个部分。第

我有从SQLite数据库到onBindViewHolder的文本,格式如下:你好,我是{Alex}。 我希望能够调整{}内文本的大小或颜色,并从输出中隐藏那些{}大括号。最后一个愿望是:你好,我是亚历克斯

这是我第一次遇到与Regex相关的事情,有谁能给我一个简短的循序渐进的指导,告诉我如何做到这一点

我发现了类似的问题:


但我不明白该如何处理“(?我不擅长正则表达式。但下面是对您的问题的回答,它将让您获得所需的结果(获取表达式文本并相应地设置格式)

因此,基本上我们将原始问题分为三个部分。第一部分,表达式前的文本。第二部分,表达式文本。第三部分,表达式后的文本。然后,我们使用
SpannableString
将表达式文本(第二部分)的颜色和大小格式化。然后,我们将这三部分合并返回一个新文本。
你可以这样使用它

CharSequence ques = getFormattedQuestion(holder.itemView.getContext(), question.getQuestion(), R.color.blue, R.dimen.text_size);
holder.tvQuestion.setText(ques);

@AlexK我的错。问题出在
leftPart
上。我已经更新了代码。请现在检查。sidhnarth jain,非常感谢。它生效了。现在循环视图中的文本看起来像“Alex}.Alex”。在{"它不再显示。我需要更好地理解你的代码。我稍后会编写更新。@AlexK你尝试过更新的方法吗?仍然不起作用?@AlexK我已经添加了一些解释。现在你可以更好地理解它了。有注释描述了每一步。好家伙!它起作用了。作为初学者,我现在正在尝试理解p你用线的艺术。那些-1和+1让我困惑。
public CharSequence getFormattedQuestion(Context context, String originalQues, @ColorRes int colorToSet, @DimenRes int textSize) {

    // First we check if the question has the expression
    if (originalQues == null || !originalQues.contains("{") || !originalQues.contains("}")) {
        return originalQues;
    }

    // Then we break the original text into parts

    int startIndex = originalQues.indexOf("{");
    int endIndex = originalQues.indexOf("}");

    // 1) The text before the expression
    String leftPart = startIndex>0 ? originalQues.substring(0, startIndex) : "";

    // 2) The text after the expression (if there is any)
    String rightPart = endIndex == originalQues.length()-1 ? "" : originalQues.substring(endIndex+1);

    // 3) The expression text
    String midPart = originalQues.substring(startIndex+1, endIndex);

    // 4) Format the mid part with the give color (colorToSet) and size (textSize)
    SpannableString spannableMid = new SpannableString(midPart);
    spannableMid.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, colorToSet)), 0, midPart.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableMid.setSpan(new AbsoluteSizeSpan(context.getResources().getDimensionPixelSize(textSize)), 0, midPart.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);


    // check if there is any left part; if so, add it with mid
    CharSequence leftAndMid = leftPart.length()>0 ? TextUtils.concat(leftPart, " ", spannableMid) : spannableMid;

    // Check if there is any right part else return the left and mid
    return rightPart.length()>0 ? TextUtils.concat(leftAndMid, " ", rightPart) : leftAndMid;
}
CharSequence ques = getFormattedQuestion(holder.itemView.getContext(), question.getQuestion(), R.color.blue, R.dimen.text_size);
holder.tvQuestion.setText(ques);