#java #if-statement #switch-statement
#java #if-оператор #оператор switch
Вопрос:
я попробовал CharacterIterator, и оператор Switch работает нормально, только если я попытаюсь добавить оператор If в случае i, он мне ничего не показывает. Не могли бы вы сказать мне, в чем моя ошибка?
StringBuilder sb = new StringBuilder(input);
CharacterIterator it= new StringCharacterIterator(input);{
for(char ch = it.first(); ch!= CharacterIterator.DONE; ch = it.next()) {
switch(ch) {
case 'E':
sb.append("S");
break;
case 'n':
sb.append("O");
break;
case 'g':
sb.append("L");
break;
case 'a':
sb.append(".");
break;
case 'i':
if(it.previous() == ' ') {
sb.append("ai");
break;
}
break;
case ' ':
sb.append(" ");
break;
} } }
Вот мой код. Вывод «Engine» должен быть «SOLai», и я пытаюсь проверить, находится ли символ «i» в начале слова или где-то еще. Так что, если он находится в начале, мой вывод заменит «i» на «ai», а если его нет, он должен удалить его.
Комментарии:
1. Каждый раз, когда вы вызываете
it.previous()
, вы отменяетеit.next()
то, что позволило бы вашему циклу прогрессировать. Итак, как только вы сталкиваетесь с буквойi
, ваша программа продолжает сталкиваться с тем жеi
самым снова и снова.2. Спасибо за объяснение проблемы, не видел этой проблемы! Вы также знаете, как двигаться дальше после того, как я проверил предыдущий символ? я попытался добавить it.next(), но это не сработало @VGR
3.
it.next()
действительно будет работать, но это должно быть после вашегоif
блока, потому что вы вызываете его.previous() каждый раз, когда встречается ‘i’, независимо от того, проходит ли if-тест.
Ответ №1:
StringBuilder sb = new StringBuilder(input);
CharacterIterator it= new StringCharacterIterator(input);{
for(char ch = it.first(); ch!= CharacterIterator.DONE; ch = it.next()) {
switch(ch) {
case 'E':
sb.append("S");
break;
case 'n':
sb.append("O");
break;
case 'g':
sb.append("L");
break;
case 'a':
sb.append(".");
break;
case 'i':
if(it.previous() == ' ') {
sb.append("ai");
it.next();
break;
}
sb.append("I");
it.next();
break;
case ' ':
sb.append(" ");
break;
} }
System.out.print(sb.toString());
}
Вам нужно добавить it.next() в оператор if, и после этого цикл for перейдет к следующему символу! Благодаря @VGR