#java #android #spannablestring
Вопрос:
Я хочу выполнить поиск по охватываемой строке, чтобы найти индекс определенной подстроки, длину или точные символы которой я не знаю, например [size=??]
, где вопросительные знаки могут быть любыми символами или подстрокой любой длины. Если возможно, я также хотел бы знать длину найденной такой строки.
(редактировать) Пример: Если "string [size=212] more string"
была задана такая строка, я хочу , чтобы она возвращала индекс, поэтому в этом случае 7
и длину [size=212]
, в этом случае 10
Комментарии:
1. Вы можете использовать регулярное выражение и сопоставитель, а затем получить подстроку и, следовательно, длину
2. Пожалуйста, укажите в своем вопросе минимальный ввод и ожидаемый результат.
3. @Darkman Я отредактировал его, чтобы включить пример
4. @Darkman индекс от
[
, моя ошибка в том, что я забыл считать от 0, а 10-это длина всего, что заключено в квадратные скобки, включая сами квадратные скобки
Ответ №1:
Вы можете выполнить эту работу, используя шаблон и сопоставитель.
public class Main
{
public static void main(String[] args)
{
String str = "string [size=212] more string [size=212] more string here";
Pattern pat = Pattern.compile("\[size=[0-9] \]");
Matcher mat = pat.matcher(str);
int index, lastIndex = 0, length, value;
while(mat.find()) {
final String found = mat.group(0);
value = Integer.parseInt(found.replaceAll("^\[size=|\]$", ""));
length = found.length();
index = str.indexOf(found, lastIndex);
lastIndex = length;
System.out.printf("index: %d, length: %d, string: %s, value: %d%n", index, length, found, value);
}
}
}
Выход:
index: 7, length: 10, string: [size=212], value: 212
index: 30, length: 10, string: [size=212], value: 212
Комментарии:
1. Спасибо! Я попробую это и приму ваш ответ после того, как он сработает, я знаю, что может быть немного поздно спрашивать, но есть ли способ получить значение и после знака=? итак, 212
2. @Tamzid Смотрите мои отредактированные.
3. Там есть опечатка. Измените это
lastIndex = length;
на этоlastIndex = index length;
.
Ответ №2:
Вам нужно использовать регулярные выражения для извлечения подстроки. Как только вы его получите, выполните поиск соответствия с помощью функции indexOf , которая даст вам первый индекс появления вашей подстроки.
Примечание:пожалуйста, дайте более подробную информацию по вашему вопросу
Комментарии:
1. Я отредактировал его, чтобы привести пример, как именно вы использовали бы регулярное выражение для извлечения подстроки?