command.replaceAll( "$player" , player.getName()); |布基特



我正在开发一个系统,通过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

最新更新