在 For 循环增量中使用 if else
Using if else in For Loop increment
我在 Java 中遇到问题:
Given a string, return a string made of the chars at indexes 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);
}
我们可以这样做吗?
你不能在那里使用 if 但你可以使用三元运算符
for (int i = 0; i < str.length(); i += i%4 == 0 ? 1 : 3) {
result += str.charAt(i);
}
关于问题"Using if else in For Loop increment",我同意马诺斯的回答。
以下是我的一些建议。
在我看来,代码清晰干净很重要。
在每个循环中将 str.length()
提取到局部变量而不是 'calculating' 是一个很好的做法。
如果您要通过大量时间附加字符串来构建字符串,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();
简单地说,你想要从 0 开始每 4th 个位置的两个字符。你可以使用以下代码:
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()
将包含所需的字符串。
我在 Java 中遇到问题:
Given a string, return a string made of the chars at indexes 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);
}
我们可以这样做吗?
你不能在那里使用 if 但你可以使用三元运算符
for (int i = 0; i < str.length(); i += i%4 == 0 ? 1 : 3) {
result += str.charAt(i);
}
关于问题"Using if else in For Loop increment",我同意马诺斯的回答。
以下是我的一些建议。
在我看来,代码清晰干净很重要。
在每个循环中将 str.length()
提取到局部变量而不是 'calculating' 是一个很好的做法。
如果您要通过大量时间附加字符串来构建字符串,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();
简单地说,你想要从 0 开始每 4th 个位置的两个字符。你可以使用以下代码:
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()
将包含所需的字符串。