错误:二元运算符'+'的错误操作数类型

时间:2017-09-25 17:15:07

标签: java concatenation

我这里有一个代码,它将采用名为toRepeat的字符串,并在同一行中重复n次。例如toRepeat = *,n = 3,result = ***

public class RepeatIt {
    public static String repeatString(final Object toRepeat, final int n) {
        int i = 0;
        if (toRepeat instanceof String) {
            while (i < n) {
                toRepeat = toRepeat + toRepeat;
            }
            return toRepeat;
        } else {
            return "Not a string";
        }
    }
}

但是我在2 +之间的toRepeat符号上出现错误,该符号表示二元运算符+的错误操作数类型。如果你知道我怎么解决这个问题,请告诉我,我会非常感激。

3 个答案:

答案 0 :(得分:1)

您可以更改

while (i < n){
    toRepeat = toRepeat + toRepeat; // operations are not defined for type Object
}
return toRepeat;

String tr = (String)toRepeat; // cast to String 
while (i < n){
    tr = tr + tr; // valid on String
    i++; // some condition to terminate
}
return tr;

编辑 :正如@oleg所建议的那样,使用StringBuilder优先于循环连接字符串。

Edit2 :要一次增加一个字符,您可以执行以下操作:

String tr = (String)toRepeat; // this would be *
String finalVal = ""; 
while (i < n){
    final = finalVal + tr; // would add * for each iteration
    i++; 
}
return finalVal;

答案 1 :(得分:1)

这里实际上有三个错误: 第一个是Object的类型toRepeat(它是final,即您可能不会分配新值):对象没有+。您可以将其转换为String,如之前的答案中所示。 第二:您的循环不会终止,因为i会停留0。 第三:如果你增加i(例如循环中的i += 1)。您将在第一个循环后获得**,在第二个循环后获得****,在第三个循环后获得8个星。

答案 2 :(得分:0)

我认为Apache lib在大多数情况下可以提供帮助。它包含StringUtils类,有许多有用的方法可以使用String。这是其中之一:

public class RepeatIt {
    public static String repeatString(final Object toRepeat, final int n) {
        return toRepeat instanceof String ? org.apache.commons.lang3.StringUtils.repeat((String)toRepeat, n) : "Not a string";
    }
}