在 Java 中更改字符串

新手上路,请多包涵

我想将一个字符串发送到一个方法并在那里更改字符串。该方法应返回 void。例子:

 String s = "Hello";
ChangeString(s);

String res = s;
//res = "HelloWorld"
-------------------------------------------

private void ChageString(String s){
s = s + "World";
}

我怎样才能用 Java 做到这一点?不加一个类就可以做到吗?

谢谢!铅

原文由 bahar_p 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 429
2 个回答

由于两个原因,您的方法无法使用当前界面:

  • 字符串是不可变的。一旦您创建了一个字符串,您以后就不能更改该字符串对象。
  • Java 使用按值传递,而不是按引用传递。当您在您的方法中将新值分配给 s 时,它只会修改本地 s ,而不是调用代码中的原始 s

要使您的方法起作用,您需要更改界面。最简单的更改是返回一个新字符串:

 private String changeString(String s){
    return s + "World";
}

然后这样称呼它:

 String s = "Hello";
String res = changeString(s);

在线查看它: ideone

原文由 Mark Byers 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 StringBuffer 而不是 String 它将解决您的问题。

 public static void main(String[] args) {
    StringBuffer s = new StringBuffer("Hello");
    changeString(s);
    String res = s.toString();
    //res = "HelloWorld"
}

private static void changeString(StringBuffer s){
    s.append("World");
}

或者,如果您真的只需要使用 String,那么这里是使用反射的解决方案:

 public static void main(String[] args) {
    String s = "Hello";
    changeString(s);
    String res = s;
    //res = "HelloWorld"
}

private static void changeString(String s){
    char[] result = (s+"World").toCharArray();
    try {
        Field field = s.getClass().getDeclaredField("value");
        field.setAccessible(true);
        field.set(s, result);

    } catch (NoSuchFieldException | SecurityException | IllegalArgumentException |
            IllegalAccessException  e1) {
        e1.printStackTrace();
    }
}

原文由 Alex 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题