在 For 循环增量中使用 if else

2022-09-03 08:38:33

我在Java中有一个问题:

给定一个字符串,返回一个由索引 0、1、4、5、8、9...

我知道如何解决它,但是我想知道我是否有可能在for循环增量本身中使用,例如:if-else

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

我们能做这样的事情吗?


答案 1

你不能使用 if,但你可以使用三元运算符

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

答案 2

简单地说,您希望从0开始的每4位置有两个字符。您可以使用以下代码:

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()