2017-02-19 8 views
-4

Это мой код:StringIndexOutOfBoundsException с подстроки

String s = word; 
String[] split = s.split(Dictionary.searchTerm); 
String s1 = split[0]; 
String s2 = split[1]; 
String cut1 = "..."; 
String cut2 = s2.substring(0, 20); 

я получаю java.lang.StringIndexOutOfBoundsException: length=17; regionStart=0; regionLength=20 вызванное линией String cut2 = s2.substring(0, 20);

То, что я пытаюсь сделать, это, например, это исходная строка s

Google
Android
Gmail
Youtube
компании Apple
IOS
Mac
Microsoft
Окна

searchTerm является Youtube, поэтому нужная строка

... Youtube Яблоко

Как решить эту проблему? В основном то, что я пытаюсь достичь, - это заменить строку перед поискомTerm на ... и добавить частичную часть строки после searchTerm.

+1

'String cut1 = s1.replace (s1," ... ");' такое же, как 'String cut1 =" ... ";'. Что вы пытаетесь сделать в этой строке? Также укажите правильные значения в примере кода. Вместо того, чтобы сказать, что '' 'какой-то текст, поместите его в код' s = "некоторый текст .."; '. То же самое о 'Dictionary.searchTerm'. – Pshemo

+0

Извините. Просто хочу спросить, как на самом деле searchTerm относится к нужной строке. – digit

+0

Строка '' 'фактически является данными из столбца в моей базе данных Sqlite. 'Dictionary.searchTerm' - текстовый пользователь, вводимый в строке поиска. Он динамически меняется и привязан к TextChangedListener – user2872856

ответ

1

Ваше требование может быть достигнуто с помощью следующего кода, а не жесткого испытания.

String s = "Google  Android Gmail Youtube  Apple iOS  Mac  Microsoft Hewlett packard  Windows"; 

      String[] keywords = s.split("\\s+"); 

      String searchTerm = "Youtube"; 

      String endText = ""; 

      for(int index = 0; index < keywords.length; index++) { 
       if(keywords[index].contentEquals(searchTerm)) { 
        if(index != (keywords.length - 1)) { 
         endText = endText + "..." + " " + searchTerm + " " + keywords[index + 1]; 
        } else { 
         endText = endText + "..." + " " + searchTerm + " " + keywords[0]; 
        } 
       } 
      } 

// Here the endText would be: "... Youtube Apple" 
+0

Строка endText = ""; это просто инициализация строки, которая содержит значение для строки, которая должна быть установлена. Вы можете опубликовать свой код того, как вы делаете setText, потому что я проверил код, и он работает отлично. –

+0

Спасибо, он работает, если я поместил исходные данные в код Java, т. Е. Google \ n "+" Android \ n ". Просто проблема в том, что строка s из базы данных sqlite и текст сохраняется без символа \ n Но в базе данных sqlite, Google, Android и т. Д. Все разделены новой строкой. – user2872856

+0

Какая строка вы получаете из базы данных sqlite, получаете ли вы все свои ключевые слова в виде отдельной строки? Если да, тогда будет нет необходимости создавать массив с помощью функции split, вы можете просто создать arraylist и добавить строки из вашей базы данных в список, а затем использовать этот список так же, как мы использовали массив здесь. –

0

Исключение StringOutOfBoundsException, потому что вы предполагаете, что cut2 заканчивается индексом 20, а ваша строка не так длинна. Вместо жесткого кодирования 20 вы хотите рассчитать длину s2. И если вы ожидаете, что s2 будет иметь длину 21, вы, вероятно, захотите проверить, чтобы он хранил то, что, по вашему мнению, хранит.

Смежные вопросы