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

时间:2013-05-28 20:20:07

标签: java string

我正在实现我自己的脚本语言作为辅助项目,并且语言变量由$ [变量名称]访问。但是,当我使用String.replace()用myvar的值(例如'My variable')替换(例如)$ 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

发生了什么事?

3 个答案:

答案 0 :(得分:8)

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

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

...除非声明replaceVars static。然后它按预期工作。

答案 1 :(得分:0)

正如一些评论所说:对我有用。

但是,您没有要求的是在实施方面为您的副项目提供建议。尝试处理“$ myVar $ myVars $ myVarIsALongVariableName” - 您可能更愿意做正确的事情并进行适当的标记化等。

恕我直言,这是另一个层面上的意外行为。使用其他答案解决您的根问题。另外,请仔细检查您是否正在运行此类并且已正确编译,例如通过将main的代码更改为

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

答案 2 :(得分:-1)

没关系。它正在做你写的。

  1. result == "$myvar"
  2. "$myvar"已被"This is a variable"
  3. 取代
  4. 符号$已不再出现在result中,因此不会再发生替换。
  5. P.S。我只是想知道另一位评论员是否真的意识到发生了什么?没有特别的字符或其他东西,只需按照你的算法算法。在发布之前先想想。

    Prooflink

    This code works