我正在开发一个系统,通过Java插件将我的网站与我的Minecraft服务器连接起来!但是当我尝试用我的我的世界玩家名称替换字符串中的$player
时,我遇到了一些问题,请帮助:)
ResultSet results = statement.executeQuery();
if(results.next()) {
String command = ""+results.getString(2);
String newcmd = ""+command.replaceAll("b$playerb", ""+player.getName());
System.out.println(newcmd);
player.sendMessage("u00A75SpaceStore u00A78u00A7l| u00A72Code Activated!");
}
字符串命令与"给石头$player"相同
输出
give $player stone
首先,您需要使用双反斜杠来指定单词边界,如反斜杠、转义和引用中所述: https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
因此,有必要在表示正则表达式的字符串文本中使用双反斜杠,以保护它们免受 Java 字节码编译器的解释。
其次,空格和$
符号之间没有词边界,因为它们都是非单词符号,您可以在此处阅读单词边界的解释:正则表达式中的单词边界是什么?
正确的语法将是System.out.println(s.replaceAll("\$player\b", "user1"));
试试这个代码:
public static void main(String[] args) {
String s = "give $player stone";
System.out.println(s.replaceAll("\b\$player\b", "user1"));
System.out.println(s.replaceAll("\$player\b", "user1"));
}
它输出:
give $player stone
give user1 stone