Использование if else в шаге For Loop

У меня проблема с Java:

С учетом строки верните строку из символов в индексы 0,1,4,5,8,9...

Я знаю, как его решить, однако мне было интересно, возможно ли мне использовать if-else для приращения for-loop, например:

for (int i=0; i < str.length(); if (i%4==0) i++, else i+=3){
    result += str.charAt(i);
}

Можем ли мы сделать что-то подобное?

Ответы

Ответ 1

Вы не можете использовать a, если есть, но вы можете использовать тернарный оператор

for (int i = 0; i < str.length(); i += i%4 == 0 ? 1 : 3) {
    result += str.charAt(i);
}

Ответ 2

Что касается вопроса "Использование if else в шаге For Loop", я согласен с ответом Manos. Ниже приведены некоторые из моих предложений. На мой взгляд, важно, чтобы коды были ясными и чистыми. И это хорошая практика, которая извлекает str.length() для локальной переменной вместо "вычисления" ее в каждом цикле. И если вы строите строку, добавляя ее много времени, StringBuilder - хороший выбор.

    String str = "this is your string ...";
    int length = str.length();
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < length ; i += (i%4 == 0 ? 1 : 3)){
       builder.append(str.charAt(i));
    }
    String result = builder.toString();

Ответ 3

Положив это просто, вам нужно два символа из каждой 4 th позиции, начиная с 0. Для этого вы можете использовать следующий код:

StringBuilder builder = new StringBuilder();
for (int i = 0; i < safeLength; i += 4){
    builder.Append(str.substring(i, i + 2));
}

В отличие от ответа, который вы приняли, в этом ответе есть:

  • отсутствие обфускации;
  • намерение очень ясно; и,
  • главное, no if-else или тернарный оператор.

Обновление: Я знаю о возможности IndexOutOfBoundsException, но поскольку я хотел только обратить внимание на основную логику, я не добавил эту проверку. Вот код, который необходимо добавить, чтобы избежать исключительных случаев:

Поместите следующий код над циклом for:

int safeLength = str.Length();
bool lengthCorrectionWasNeeded = (str.length() - 1) % 4 == 0;
if (lengthCorrectionWasNeeded) safeLength--;

Поместите следующий код ниже цикла for:

if (lengthCorrectionWasNeeded) builder.append(str.substring(str.length() - 2));

В конце builder.ToString() будет содержаться нужная строка.