Java 从参数广播文本

Java 从参数广播文本,java,bukkit,Java,Bukkit,我想发出广播命令。当运行/broadcast This is a test时,它会在游戏中播放这是一个测试(带有空格)。我试过使用: Bukkit.getServer().broadcastMessage(ChatColor.RED + args[0] + " " + args[1] + " " + args[2] + " " + args[3] + " " + args[4] + " " + args[5] + " " + args[6] + " " + args[7] + " " + arg

我想发出广播命令。当运行
/broadcast This is a test
时,它会在游戏中播放这是一个测试(带有空格)。我试过使用:

Bukkit.getServer().broadcastMessage(ChatColor.RED + args[0] + " " + args[1] + " " + args[2] + " " + args[3] + " " + args[4] + " " + args[5] + " " + args[6] + " " + args[7] + " " + args[8] + " " + args[9] + " " + args[10] + " " + args[11] + " " + args[12] + " " + args[13] + " " + args[14]);

但我知道这是错误的。如何修复此问题?

以下是最终有效的代码:

if (args.length > 0) {
    String broadcast = "";
    for (String message : args) {
        broadcast = (broadcast + message + " ");
    }
    Bukkit.getServer().broadcastMessage(ChatColor.WHITE + "[" + ChatColor.GOLD + "BROADCAST" + ChatColor.WHITE + "]" + ChatColor.RED + broadcast);
}
使用

仅当正好有15个参数时才有效。如果参数较少,它将抛出一个,因为您试图访问数组中不存在的部分。如果有更多参数,代码将只打印前15个参数,其余参数将被忽略

要解决此问题,您需要遍历所有参数:

for(String argument : args)
然后,您需要将参数添加到广播消息中,并添加一个空格:

message+=argument;
message+=" ";
为避免错误,还应检查是否至少有一个参数:

if(args.length >= 1)
下面是您的代码的样子:

if (args.length >= 1) { // make sure there is at least 1 argument to avoid an ArrayOutOfBoundsException
    String message = ""; // initialize the "message" variable
    for (String argument : args) { // loop through all of the arguments
        message += argument; // add the argument to the message
        message += " "; // add a space to the message
    }

    Bukkit.getServer().broadcastMessage(ChatColor.RED + message); // broadcast the message
}

如果您使用的是Java 8,您可以使用一种方便的方法来使用
收集器

Bukkit.getServer().broadcastMessage(
    ChatColor.RED + Arrays.stream(args)
                        .collect(Collectors.joining(" "))
);
否则,遍历数组并使用
StringBuilder
连接元素:

if (args.length == 0)
    // Premature return instead of using if-else
    // to reduce cyclomatic complexity.
    return false;
if (args.length == 1) {
    // fast path
    Bukkit.getServer().broadcastMessage(ChatColor.RED + args[0]);
    return false;
}

StringBuilder message = new StringBuilder(args[0]);
for (String each : args)
    message.append(" ").append(each);
String broadcast = message.deleteCharAt(0).toString();
Bukkit.getServer().broadcastMessage(ChatColor.RED + broadcast);
if (args.length == 0)
    // Premature return instead of using if-else
    // to reduce cyclomatic complexity.
    return false;
if (args.length == 1) {
    // fast path
    Bukkit.getServer().broadcastMessage(ChatColor.RED + args[0]);
    return false;
}

StringBuilder message = new StringBuilder(args[0]);
for (String each : args)
    message.append(" ").append(each);
String broadcast = message.deleteCharAt(0).toString();
Bukkit.getServer().broadcastMessage(ChatColor.RED + broadcast);