CharacterIterator с оператором switch и оператором if

#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