Java 在插入变量之前从资源中获取字符串长度

Java 在插入变量之前从资源中获取字符串长度,java,android,string,Java,Android,String,在我的一个文本视图中我想将一些文本设置为粗体字体,如下所示: 为了做到这一点,我使用以下方法: final SpannableStringBuilder sb = new SpannableStringBuilder(itemView.getContext().getResources().getString( R.string.ActivityIShared_with, sharedTo.get( getAdapterPosition() ) )); final StyleSpan bss

在我的一个
文本视图中
我想将一些文本设置为粗体字体,如下所示:

为了做到这一点,我使用以下方法:

final SpannableStringBuilder sb = new SpannableStringBuilder(itemView.getContext().getResources().getString( R.string.ActivityIShared_with, sharedTo.get( getAdapterPosition() ) ));
final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD);
sb.setSpan(bss, 0, 11, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
tv_SharedWith.setText(sb);
在哪里

与%1$s共享
正如您所看到的,这段代码是有效的。但是,我需要手动计算
R.string.activity的长度,直到
%1$s
的部分为11,以便将其加粗

也许过几天,我会改变那个句子,我想避免每次都数它的长度

如果没有
sharedTo.get(getAdapterPosition())
,如何获取它的长度?不带变量的字符串


谢谢

不用这样做,您可以在字符串中使用粗体标记并以HTML格式显示它。请参见下面的代码

String text=itemView.getContext().getResources().getString(R.String.ActivityIShared_with,sharedTo.get(getAdapterPosition))

SpannableStringBuilder样式字符串

if(SDK_INT>N)styledString=(SpannableStringBuilder)Html.fromHtml(,Html.FROM_Html_MODE_COMPACT)else styledString=(SpannableStringBuilder)Html.fromHtml(result)


tv_Sharewith.setText(styledString.toString())

据我所知,您基本上是在尝试使用某种样式来连接字符串。您可以尝试直接解决您的问题,只需稍加修改

添加此方法

public static SpannedString buildString(String boldText, String regularText) {
    final SpannableStringBuilder builder = new SpannableStringBuilder();
    int start = builder.length();
    builder.append(boldText);
    builder.setSpan(new StyleSpan(BOLD), start, builder.length(), SPAN_INCLUSIVE_EXCLUSIVE);
    builder.append(regularText);
    return new SpannedString(builder);
}
改变

<string name="ActivityIShared_with">Shared with: %1$s</string>

这样,您就不必计算引用
活动的文本长度了。

您尝试过regex吗?`String mydata=“String with:1s$s”;Pattern=Pattern.compile(“^[A-Za-z,]+:”;Matcher Matcher=pattern.Matcher(mydata);`诸如此类的东西,您需要将模式作为静态变量,因为这会消耗大量的每次编译
<string name="ActivityIShared_with">Shared with: %1$s</string>
<string name="ActivityIShared_with">Shared with:</string>
buildString(context.getString(R.string.ActivityIShared_with), sharedTo.get(getAdapterPosition()));