我遇到了一个问题,我现在已经工作了几天,真的找不到答案...... 我相信它很简单,但我找不到它...... 我已经遍布谷歌,并没有找到任何可以帮助我的东西(也许我不知道要搜索什么?)
注意:在文本中,占位符是{}
中的任何内容所以我的问题:
我有一个字符串:
“{Prefix} {playerLeave}”
使用正则表达式,我需要找到{Prefix}用值替换它,然后检查新值是否有占位符等等。
在这种情况下,它会像这样:
“{Prefix} {playerLeave}”
“[征服]你离开了{kingdom}”
“[征服]你离开了Celestra”
我尝试过(并且最远的)是:
private static String translate(String text){
try{
while(text.matches("\\{(.*?)\\}")){
Matcher match = Pattern.compile("\\\b{(.*?)\\}\b").matcher(text);
while (match.find()) {
text = match(match.group(), text);
}
}
if (text.matches("\\{(.*?)\\}"))
translate(text);
return text;
}catch(Exception e) {
e.printStackTrace();
Bukkit.getConsoleSender().sendMessage(getMessage("&4ERROR: &cA placeholder failed!"));
return "";
}
}
private static String match(String match, String text){
text = text.contains("{Prefix}") ? text.replace(match, String.valueOf(Cach.Prefix))
text = text.contains("{TeleportDelay}") ? text.replace(match, String.valueOf(Cach.tpDelay)) : text.replace(match, "");
text = text.contains("{town}") ? text.replace(match, String.valueOf(Cach.StaticTown.getName())) : text.replace(match, "");
text = text.contains("{village}") ? text.replace(match, String.valueOf(Cach.StaticVillage.getName())) : text.replace(match, "");
text = text.contains("{kingdom}") ? text.replace(match, String.valueOf(Cach.StaticKingdom.getName())) : text.replace(match, "");
text = text.contains("{color}") ? text.replace(match, Cach.StaticKingdom.getColorSymbol()) : text.replace(match, "");
return text;
}
问题是它在某个程度上工作直到阶段
2.“[征服]你离开了{王国}”
如果我调试它就是sais:
text.matches(“\ {(。*?)\}”)在此代码块中为false:
if (text.matches("\\{(.*?)\\}"))
translate(text);
提前致谢!
的问候,
托马斯
答案 0 :(得分:0)
此正则表达式Pattern.compile("\\\b{(.*?)\\}\b")
出错:最后\b
只有一个反斜杠。
再一次,你说:
我需要找到{Prefix}将其替换为值
但此行中的组仅匹配花括号内的文本(即前缀)
因此,您找到的所有匹配项都包含没有大括号的组。
函数text.replace(match, ... )
稍后执行的match
将仅替换花括号内的文本。
如果我知道你的想法,我建议将这一行改为:
Pattern.compile("(\\{[^\\}]*\\})")