2015-02-06 1 views
0

Во-первых, я СУПЕР новичок в StackOverflow (так простите мое уродливое форматирование), и есть только несколько лет опыта программирования (всего около 6 классов программирования)Проверьте, не является ли каждая буква в ArrayList <String>?

я работаю на палача проекта. Я решил использовать StringBuilder для некоторых из них. Например, я хочу, чтобы проверить, какой индекс или индексы полукокс chosenLetter = 'C' находится в StringBuilder chosenWord = new StringBuilder("Ceramics");

В идеале, я бы для цикла, чтобы пройти через StringBuilder слово «Керамика» и скажите мне индексы 0 и 7. Я абсолютно не понимаю. Я попытался с помощью функции indexOf(), но по какой-то причине, если я

for (int i = 0; i < chosenWord.length(); i++) { 
    if (chosenWord.indexOf(chosenLetter, i) != -1) { 
     System.out.println("This should be a match at index " + i); 
    } 
} 

Было бы распечатать, например:

Это должно быть совпадение по индексу 0

Это должно быть совпадение с индексом 1

Это должно быть совпадение с индексом 2

Это должно быть совпадение с индексом 3

Это должно быть совпадение с индексом 4

Это должно быть совпадение с индексом 5

Это должно быть совпадение с индексом 6

Это должно быть совпадение по индексу 7

Это должно быть совпадение с индексом 8

Вместо

Это должно быть совпадение по индексу 0

Это должно быть совпадение с индексом 7

Любые идеи, как идти об этом? Благодарю.

И снова, извините за уродливый формат. Если есть какие-то вопросы по разъяснению, я был бы рад попытаться прояснить!

+1

Итак, возможно ['StringBuilder # indexOf'] (http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html#indexOf (java.lang.String)) является вне вопроса? – MadProgrammer

+0

Вы просто не понимаете, что делает 'selectedWord.indexOf (selectedLetter, i)'. –

+0

Почему бы вам просто не сделать StringBuilder.toString(). Equals()? Кажется, что за кулисами это было бы довольно похоже и, вероятно, меньше подвержено ошибкам ... –

ответ

1

Проверить это

for (int i = 0; i < chosenWord.length(); i++) { 
    if (chosenWord.charAt(i) == chosenLetter) { 
    System.out.println("This should be a match at index " + i); 
    } 
    } 

Это напечатает ваш желаемый из положить

+0

Ничего себе .... Ну это было легко. Спасибо, так так! – Sergnio

+1

Я думаю, вам нужно разобраться, чтобы получить нечувствительную к регистру часть. поскольку он будет просто соответствовать «c», а не «C» или наоборот. – ppuskar

1

Вы можете использовать StringBuilder#indexOf(String, int), но вы должны быть уверены, чтобы увеличить index позицию после каждого удачного матча, в противном случае вы будете в конечном в бесконечном цикле ...

StringBuilder sb = new StringBuilder("ceramics"); 
int index = 0; 
while ((index = sb.indexOf("c", index)) >= 0) { 
    System.out.println(index); 
    index++; 
} 

Следует также остерегаться, что это чувствительно к регистру поиск, как вы можете видеть, я сделал всего текста в нижнем регистре, так что я могу поймать позиции 0 И 6

Основная проблема с вашим первая попытка в том, что вы на самом деле не обращая внимания на результат indexOf

if (chosenWord.indexOf(chosenLetter, i) != -1) { 
    System.out.println("This should be a match at index " + i); 

Но тогда печатать i, поэтому на каждой итерации, вы получаете результат либо 0 или 6, поэтому отсюда и причина, она печатает результаты для 0 - 6

Итак ...

i = 0; chosenWord.indexOf(chosenLetter, i) == 6, print 0 
i = 1; chosenWord.indexOf(chosenLetter, i) == 6, print 1 
i = 2; chosenWord.indexOf(chosenLetter, i) == 6, print 2 
i = 3; chosenWord.indexOf(chosenLetter, i) == 6, print 3 
i = 4; chosenWord.indexOf(chosenLetter, i) == 6, print 4 
i = 5; chosenWord.indexOf(chosenLetter, i) == 6, print 5 
i = 6; chosenWord.indexOf(chosenLetter, i) == 6, print 6 
i = 7; chosenWord.indexOf(chosenLetter, i) == -1, ignored 

Вы на самом деле не нужен цикл Outter, вам просто нужно держать цикл до тех пор, пока indexOf< 0, а было показано выше ...

+0

Если вы plz объясните проблему тоже, я был бы так рад проголосовать u up –

+1

@KickButtowski Я надеялся проигнорировать его, проверить обновление, посмотреть, имеет ли это смысл ... – MadProgrammer

0

причина, почему вы видите, что выход из-за indexOf возвращает 0 для i = 0 и 6 для i = 1 - 7. Во всех этих случаях доход отличается от -1, что соответствует заявлению if. Рассмотрите возможность использования charAt, аналогично предложенному @ppuskar.

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

  • Нет связанных вопросов^_^