Java-String.replace()的意外行为

Java-String.replace()的意外行为,java,string,Java,String,我将自己的脚本语言作为一个辅助项目来实现,在语言中,变量由$[variable name]访问。但是,当我使用String.replace()用myvar的值(例如“我的变量”)替换(例如)$myvar时,使用以下代码: public static void main(String[] args) { System.out.println(replaceVars("$myvar")); } public static String replaceVars(String

我将自己的脚本语言作为一个辅助项目来实现,在语言中,变量由$[variable name]访问。但是,当我使用String.replace()用myvar的值(例如“我的变量”)替换(例如)$myvar时,使用以下代码:

public static void main(String[] args)  
{  
    System.out.println(replaceVars("$myvar"));  
}  

public static String replaceVars(String source)  
{  
    String[][] varNames = new String[][]{new String[]{"myvar", "This is a variable"}, new String[]{"anothervar", "This is another variable"}, new String[]{"yetanothervar", "This is yet another variable"}};  
    String result = source;  
    for(String[] s : varNames) result = result.replace("$" + s[0], s[1]);  
    return result;  
}  
输出:$myvar

发生了什么?

给定的(原始)代码无法编译:

Main.java:7: non-static method replaceVars(java.lang.String) cannot be referenced from a static context
    System.out.println(replaceVars("$myvar"));
                       ^

。。。除非
replaceVars
声明为
static
。然后它就如预期的那样工作了。

没关系。它在做你写的东西

  • result==“$myvar”
  • “$myvar”
    替换为
    “这是一个变量”
  • 符号
    $
    不再出现在
    结果中,因此不再发生替换
  • 顺便问一下,我只是想知道其他评论员是否真的意识到发生了什么?没有特殊的字符或其他东西,请按照你头脑中的算法去做。发帖前先想一想


    正如一些评论所说:适合我

    然而,您没有要求的是关于您的辅助项目的实施方面的建议。尝试处理“$myVar$myVars$myVarIsALongVariableName”-您可能更希望正确地处理它并进行适当的标记化等

    在另一个层面上,这是一种意想不到的行为。使用其他答案解决您的根本问题。此外,请仔细检查您是否正在运行该类,以及该类是否已正确编译,例如,将main的代码更改为

    System.out.println(replaceVars("edited: $myvar"));  
    

    对我有效…输出是
    这是一个变量
    你应该使用映射来保存你的varname/bar值对原来的问题在
    replaceVars
    方法中缺少了
    static
    。我怀疑你是无意中写出了你的输入或类似的东西,因为代码,现在发布的是正确的,并且给出了正确的结果。在这个例子中,很明显,您希望得到“thisavariable”作为您的输出。但是对于将来的问题,如果我们知道您的期望会发生什么,而不仅仅是正在发生什么,那么回答者通常会很有帮助。
    replace
    只接受
    char
    ,所以根本不知道它如何工作@0A0D replace可以接受CharSequence:重载的
    replace
    接受
    CharSequence
    ,而且
    String
    实现了
    CharSequence
    。我从来不知道!thanks@condorcraft110但运行该代码完全符合您的预期,它返回“这是一个变量”