我正在实现我自己的脚本语言作为辅助项目,并且语言变量由$ [变量名称]访问。但是,当我使用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
发生了什么事?
答案 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)
没关系。它正在做你写的。
result == "$myvar"
"$myvar"
已被"This is a variable"
$
已不再出现在result
中,因此不会再发生替换。P.S。我只是想知道另一位评论员是否真的意识到发生了什么?没有特别的字符或其他东西,只需按照你的算法算法。在发布之前先想想。