Java 在For循环增量中使用if-else

Java 在For循环增量中使用if-else,java,if-statement,for-loop,increment,Java,If Statement,For Loop,Increment,我在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); } for(int i=0;i

我在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);
}
for(int i=0;i

我们可以这样做吗?

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

for (int i = 0; i < str.length(); i += i%4 == 0 ? 1 : 3) {
    result += str.charAt(i);
}
for(inti=0;i
关于“在for循环增量中使用if-else”的问题,我同意马诺斯的回答。 以下是我的一些建议。 在我看来,代码清晰和干净是很重要的。 将
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();
String str=“这是您的字符串…”;
int length=str.length();
StringBuilder=新的StringBuilder();
对于(int i=0;i
简单地说,从0开始,每4个位置需要两个字符。您可以为此使用以下代码:

StringBuilder builder = new StringBuilder();
for (int i = 0; i < safeLength; i += 4){
    builder.Append(str.substring(i, i + 2));
}
将以下代码放在for循环下面:

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

最后,
builder.ToString()
将包含所需的字符串。

这样的事情会混淆代码。你最好将赋值设置为有条件的,而不是循环增量的
。对于回答建议我将增量留空,然后将
if-else
放入循环体但后来删除了答案的人,我只想感谢你;我以前从未想过这一点。是的,我知道这会让代码变得“丑陋”,我只是好奇一种构造东西的方法;即使这是不必要的。但谢谢大家抽出时间!这并不是出于丑陋,而是出于可维护性和可读性。一段完美的代码会让你说“啊,我马上就明白发生了什么。”仅仅因为它可以做到,并不意味着它应该做到。递增表达式必须递增或递减循环控制变量值——因此它应该遵循语言建议。+1建议使用StringBuilder。但是,在每次迭代中调用
str.length()
并不是性能问题。这个方法只返回底层
char[]
的length属性,它很可能是内联的。它不是“计算”任何东西。您的for循环要好得多,但您的解决方案将为某些对象提供StringIndexOutOfBoundsExceptioninputs@VBCPP:我想我应该更新答案,而不是把评论留在这里。好了,谢谢,这和我原来的解决方案差不多,但是没有
StringBuilder
。从未见过它,所以我认为如果我要大量修改单个字符串,我应该使用它?@micahwood50:是的,如果要大量使用基于字符串的加减法,你应该使用
StringBuilder
。你一定要读这本书。