-1

我正在将自己的脚本语言作为一个副项目来实现,并且在语言中变量由 $[变量名] 访问。但是,当我使用 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

到底是怎么回事?

4

3 回答 3

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。然后它按预期工作。

于 2013-05-28T20:25:08.060 回答
0

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

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

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

System.out.println(replaceVars("edited: $myvar"));  
于 2013-05-28T20:39:51.073 回答
-1

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

  1. result == "$myvar"
  2. "$myvar"被替换为"This is a variable"
  3. 符号$不再存在于 中result,因此不再发生替换。

PS我只是想知道其他评论员是否真的意识到发生了什么?没有特殊的字符或其他东西,请按照您脑海中的算法进行。发帖前请三思。

证明链接

此代码有效

于 2013-05-28T20:29:16.950 回答