【问题标题】:String Replace Java Function字符串替换 Java 函数
【发布时间】:2023-06-26 00:08:01
【问题描述】:
  1. 我尝试用函数替换多个类中的多个字符串
  2. 为什么这个例子不起作用?

    public static String symbole(String sym)
     {  
    sym = sym.replace("&" , "§");
    sym = sym.replace("[<3]" , "\u2764");
    return sym;
    }
    String test = "This Dont work... why [<3]";
    symbole(test);
    

我该如何替换它... 有什么建议吗? 请帮助并为我完美的英语感到抱歉

【问题讨论】:

  • 对我来说很好。你在看什么?
  • “它不起作用”是什么意思。它运作良好。你面临什么问题?
  • 你能提供一些字符串和预期替换的例子吗?
  • 你的输出是什么?你看到问号了吗?可能是编码的东西。您是否在 IDE 中运行?还是壳?操作系统? java版本?
  • 你是如何测试它不起作用的?您是否可能忘记使用 symbole(test) 返回的值,而是打印 test

标签: java string class replace bukkit


【解决方案1】:

你的问题很可能是因为你希望你的函数改变你传递给方法的原始字符串。

字符串在 java 中是不可变的,此外,您不能修改从该方法传递给方法的原始引用。

要获得您最可能期望的结果,请将方法的返回值存储在新引用中,或者让测试引用指向返回的字符串。

所以你可以试试:

test = symbole(test);

String replacedTest = symbole(test):

【讨论】:

    【解决方案2】:

    以下声明:

    sym.replace("[<3]", "\u2764");
    

    有效并将[&lt;3] 替换为“心”字符。

    我想你的问题是你认为test 在你传递给方法时会被修改。这行不通,因为String 是不可变的;调用 replace 实际上会返回一个 new String 实例。您不能将其分配回sym 并期望test 发生更改,因为Java 是按值传递的并且您不能重新设置引用。但是,由于您已经返回了修改后的字符串,您只需将返回值分配回test

    test = symbole(test);
    

    如果需要,您也可以将其分配给新变量:

    String modified = symbole(test);
    

    【讨论】: