有没有一种方法可以避免在调用这些方法时使用构造函数?

时间:2020-03-10 02:21:45

标签: java string methods return

我有这段代码试图通过在选择字符串的末尾添加“哇”来修改选择字符串。我试图使用一个自定义类,而不只是连接字符串,因为我希望将来也可以在其上运行其他方法。

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

1 个答案:

答案 0 :(得分:1)

public static String string(String str) {

    stringToReturn = str;
    return stringToReturn.trim();
}

问题在于stringToReturnModifyString上的实例字段,这意味着它与该类的特定实例相关联。 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;
  }
}