我正在我公司的一个大项目上工作,我在使用String的替换方法时遇到了一个奇怪的错误。
以下是场景:
我使用检索这些属性的单例类从属性文件中获取值。我有一个DATA的字符串,其中包括两个替换键,它们应该用编程生成的值替换。
例如:
String strDetails = PropertyLoader.get("details");
String strDataKey1= PropertyLoader.get("datakey1");
String strDataKey2 = PropertyLoader.get("datakey2");
strDetails = strDetails.replace(strDataKey1, "Programmatically Generated Value 1");
strDetails = strDetails.replace(strDataKey2, "Programmatically Generated Value 2");
在上面的代码替换strDataKey1
正在运行,但strDataKey2
没有。
我创建了简单的Java程序来测试它,它的工作原理与我在上面两行中调试代码的方式相同,所有值都按预期进行,但strDataKey2
的替换结果失败。
注意 - strKey1
和strKey2
都有特殊字符'$'
。
请告知是否有人知道如何解决它。我正在使用Eclipse最新版本的JavaEE我不能在我的公司使用其他IDE。
答案 0 :(得分:1)
可能strDataKey1
和strDataKey2
具有互补价值。
示例:
strDataKey1 = "foo";
strDataKey2 = "foobar";
strDetails = "foobar foo bar 123 foobar foo";
strDetails = strDetails.replace(strDataKey1, "Value1"); //4 matches
//strDetails is "Value1bar Value1 bar 123 Value1bar Value1"
strDetails = strDetails.replace(strDataKey2, "Value2"); //0 matches
//strDetails is "Value1bar Value1 bar 123 Value1bar Value1"
当您替换strDataKey1
“使用”主播,然后替换strDataKey2
时,您无需修改。
检查strDataKey1
和strDataKey2
中的值,并对它们进行一些考虑,比如用sentinel值,转义字符或分隔符包装它们(如果它可以解决问题)。
答案 1 :(得分:-1)
当你进行第二次替换时,似乎strDetails没有strDataKey2。 尝试重置如下,看看它是否有效
.//div