Как выполнить поиск в SpannableString, не зная точной подстроки

#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. Я отредактировал его, чтобы привести пример, как именно вы использовали бы регулярное выражение для извлечения подстроки?