Java 如何确保replaceAll将替换整个单词而不是子字符串

Java 如何确保replaceAll将替换整个单词而不是子字符串,java,regex,replaceall,Java,Regex,Replaceall,我有一本字典。迭代字典以替换文本中字典中的键。但是replaceAll函数也会替换子字符串 如何确保它与整个单词匹配(作为一个整体,而不是作为子字符串) String text=“1-(2,6-二甲基苄基)-1H-吲哚-6-羧酸的合成[69-3]制备了白色固体的标题化合物(883 mg)sdvfshd[69-3]3456” 字典={[69-3]=1-(2,6-二甲基苄基)-1H-吲哚-6-羧酸} for(Map.Entry:dictionary.entrySet()){ text=text.re

我有一本字典。迭代字典以替换文本中字典中的
。但是
replaceAll
函数也会替换
子字符串

如何确保它与整个单词匹配(作为一个整体,而不是作为
子字符串

String text=“1-(2,6-二甲基苄基)-1H-吲哚-6-羧酸的合成[69-3]制备了白色固体的标题化合物(883 mg)sdvfshd[69-3]3456”
字典={[69-3]=1-(2,6-二甲基苄基)-1H-吲哚-6-羧酸}
for(Map.Entry:dictionary.entrySet()){
text=text.replaceAll(“\\b”+Pattern.quote(entry.getKey())+“\\b”,entry.getValue());
} 

replaceAll
将正则表达式作为参数

在正则表达式中,您有:
\b
(在字符串文本中使用
\\b
)。它们是确保匹配单词而不是单词的一部分的最佳方法:
“\\bword\\b”

但在您的情况下,您不能使用单词边界,因为您不是在寻找一个单词(
[69-3]
不是一个单词)

我建议:

text=text.replaceAll("(?=\\W+|^)"+Pattern.quote("[69-3]")+"(?=\\W+|$)", ...
这样做的目的是匹配一个字符串结尾或不是单词的东西。不过,我不能保证这将是适合您的正确解决方案:这种模式必须在了解确切的完整用例的情况下进行调整

请注意,如果您的所有键都遵循类似的模式,那么可能会有一个比遍历字典更好的解决方案,例如,您可能会使用类似于
“(?=\\W+\^)\[\\d+\-\\d+\](?=\\W+\$)”

“\bword\b”的模式

示例代码:

for (row <- df.rdd.collect){   
var config_key = row.mkString(",").split(",")(0)
var config_value = row.mkString(",").split(",")(1)
val rc_applied_hiveQuery="select * from emp_details_Spark2 where empid_details= 'empid' limit 10"
var str_row = rc_applied_hiveQuery.replaceAll("\\b"+config_key+"\\b", "xyz")
println(str_row)}

用于(行)在替换之前,您是否尝试过检查元素的
equal
?我没有得到问题..你说的equal是什么意思???我使用整个文本替换,但没有标记它..我使用Pattern.quote保持特殊字符的完整性。但即使这样也不起作用。我也尝试过\\b..它不起作用work@user2832203请写信在你的问题中,代码不起作用。
for (row <- df.rdd.collect){   
var config_key = row.mkString(",").split(",")(0)
var config_value = row.mkString(",").split(",")(1)
val rc_applied_hiveQuery="select * from emp_details_Spark2 where empid_details= 'empid' limit 10"
var str_row = rc_applied_hiveQuery.replaceAll("\\b"+config_key+"\\b", "xyz")
println(str_row)}