Для моего класса CompSci
мы делаем . Вы бы скорее? функция для нашего проекта chatbot. Метод String.split()
хорошо работает для этого, но мы получаем бонусные баллы, если мы сможем это сделать без него. Я решил это сделать, просто создав метод, который реплицировал String.split
.Репликация String.split: OutOfBoundsException
private String[] separate (String phrase, String omit1, String omit2)
{
int c = 0;
//gets rid of leading and trailing whitespace, replaces target characters
//with the # character
phrase = phrase.trim();
phrase = phrase.replace(omit1, "#");
phrase = phrase.replace(omit2, "#");
//detects the number of phrases to be included in the array
for (int i = 0; i < phrase.length(); i++)
if (phrase.charAt(i) == '#')
c++;
//creates array list based on number of phrases
String[] phraseList = new String[c];
c = 0;
//builds phrases from characters found between occurrences
//of the # character
for (int i = 0; i < phrase.length(); i++)
{
if (phrase.charAt(i) == '#')
c++;
else if (phrase.charAt(i) != '#')
phraseList[c] += phrase.charAt(i);
}
return phraseList;
}
Всякий раз, когда я использую этот метод с фразой «Вы предпочитаете есть чай, кушать печенье или толкать?» (Omit1 быть «» и omit2 быть „или“) он бросает это исключение:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at Magpie.separate(Magpie.java:306)
at Magpie.getResponse(Magpie.java:44)
at MagpieRunner.main(MagpieRunner.java:24)
Я понимаю, что это что-то делать со счетчиком для phraseList
массива, но мои попытки исправить до сих пор это не помогло.
Любая помощь?
Последний 'if-else-if' должен быть просто' if-else', потому что вы просто проверяете одно и то же условие дважды, второй раз отрицая его. Кроме того, это классика [Off by one error] (http://en.wikipedia.org/wiki/Off-by-one_error). Посмотри ответы. – bcsb1001