我有这段代码试图通过在选择字符串的末尾添加“哇”来修改选择字符串。我试图使用一个自定义类,而不只是连接字符串,因为我希望将来也可以在其上运行其他方法。
for(String choice : commands) {
count++;
if(goAvailable.contains(choice)) {
actionApnd("You went to " + new ModifyString(choice).append("wow") + ".");
//System.err.print(choice + " ");
break;
} else if (count == commands.length) {
actionApnd("Where did you want to go?");
}
}
ModifyString类(已精简):
public ModifyString(String str) {
stringToReturn = str;
}
public String append(String toAppend) {
stringToReturn += toAppend;
return stringToReturn.trim();
}
我在ModifyString
类中有此方法,并且正在使用它而不是构造函数,但是一条错误消息告诉我我无法在String类型上运行append
。
public static String string(String str) {
stringToReturn = str;
return stringToReturn.trim();
}
答案 0 :(得分:1)
public static String string(String str) {
stringToReturn = str;
return stringToReturn.trim();
}
问题在于stringToReturn
是ModifyString
上的实例字段,这意味着它与该类的特定实例相关联。 static
方法中没有此类实例。
由于返回类型为String
,目前尚不清楚要实现的目标:您只需删除第一条语句即可:
public static String string(String str) {
return str.trim();
}
但是您也可以直接调用str.trim()
。
或者,您可能打算返回ModifyString
的实例:
public static ModifyString string(String str) {
return new ModifyString(str.trim());
}
请注意,字符串串联是累积字符串的一种不好的方法,因为它需要复制现有的字符串才能进行串联。
更好的方法是直接使用StringBuilder
或将其包装起来:
class ModifyString {
private final StringBuilder sb;
ModifyString(String str) {
sb = new StringBuilder(str.trim());
}
ModifyString append(String str) {
sb.append(str.trim());
return this;
}
}