Ответ 1
Вы не можете использовать a, если есть, но вы можете использовать тернарный оператор
for (int i = 0; i < str.length(); i += i%4 == 0 ? 1 : 3) {
result += str.charAt(i);
}
У меня проблема с 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);
}
Можем ли мы сделать что-то подобное?
Вы не можете использовать a, если есть, но вы можете использовать тернарный оператор
for (int i = 0; i < str.length(); i += i%4 == 0 ? 1 : 3) {
result += str.charAt(i);
}
Что касается вопроса "Использование 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();
Положив это просто, вам нужно два символа из каждой 4 th позиции, начиная с 0. Для этого вы можете использовать следующий код:
StringBuilder builder = new StringBuilder();
for (int i = 0; i < safeLength; i += 4){
builder.Append(str.substring(i, i + 2));
}
В отличие от ответа, который вы приняли, в этом ответе есть:
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()
будет содержаться нужная строка.