Предположим, что у вас есть следующая строка:
String s = "The cold hand reaches for the %1$s %2$s Ellesse's";
String old = "old";
String tan = "tan";
String formatted = String.format(s,old,tan); //"The cold hand reaches for the old tan Ellesse's"
Предположим, вы хотите закончить эту строку, но также можете указать Span
для любого слова, замененного на String.format
.
Например, мы также хотим сделать следующее:
Spannable spannable = new SpannableString(formatted);
spannable.setSpan(new StrikethroughSpan(), oldStart, oldStart+old.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new ForegroundColorSpan(Color.BLUE), tanStart, tanStart+tan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Есть ли надежный способ узнать начальные индексы old
и tan
?
Обратите внимание, что только поиск "старого" возвращает "старый" в "холодном", так что это не сработает.
Что будет работать, я думаю, заранее ищет %[0-9]$s
и вычисляет смещения для учета замен в String.format
. Это похоже на головную боль, хотя я подозреваю, что может быть такой метод, как String.format
, который более информативен в отношении особенностей его форматирования. Ну, есть?