Java-String.replace()的意外行为
我将自己的脚本语言作为一个辅助项目来实现,在语言中,变量由$[variable name]访问。但是,当我使用String.replace()用myvar的值(例如“我的变量”)替换(例如)$myvar时,使用以下代码: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
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但运行该代码完全符合您的预期,它返回“这是一个变量”