Предположим, что у вас есть следующая строка:
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, который более информативен в отношении особенностей его форматирования. Ну, есть?