收集具体论点
Collecting specific arguments
我正在 java 中开发一个游戏插件,但无法解决这个问题。我想在 args[1]
之后收集所有内容。这里有一些代码,所以你可以更好地理解。
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(sender instanceof Player) {
Player player = (Player) sender;
if(player.hasPermission("essentials.allow.kick")) {
if(args.length == 0) {
player.sendMessage(ChatColor.RED + "Please specify player name.");
}
if(args.length == 1) {
Player target = Bukkit.getPlayer(args[0]);
if(!target.isValid()) {
player.sendMessage(ChatColor.RED + "That player is not on server!");
}else {
target.kickPlayer(ChatColor.RED + "The kick reason has been told!");
}
}
if(args.length > 1) {
Player target = Bukkit.getPlayer(args[0]);
if(!target.isValid()) {
player.sendMessage(ChatColor.RED + "That player is not on server!");
}
else {
String message = Stream.of(args).skip(2).collect(Collectors.toList()).toString();
target.kickPlayer(ChatColor.RED + message);
}
}
}
}
return true;
}
它只输出[]
。
为了收集n-th元素之后的数组的所有元素,可以使用ArrayList
class的subList(int fromIndex, int toIndex)
函数。文档说:
Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive.
因此您需要将数组转换为 List
,然后在其上调用函数 subList
。
List<String> list = Arrays.asList(args).sublist(1, args.length);
// Replace number 1 with the start index where you want to trim. (Inclusive)
现在,如果您想将该列表转换为字符串,您可以使用以下函数:
public String buildMessage(List<String> list, String separator) {
StringBuilder sb = new StringBuilder();
for (String s: list) {
sb.append(s).append(separator);
}
return sb.toString();
}
然后调用它:
String message = buildMessage(list, " "); // It will separate the arguments with spaces.
完整演示
String[] args = new String[]{"Hi!", "I", "am", "a", "demo"};
List<String> list = Arrays.asList(args).sublist(1, args.length);
String message = buildMessage(list, " ");
System.out.println("Message: " + message);
产生的输出:
Message: I am a demo
让我知道这是否适合您!
编辑
如 @Holger 的评论所述,您可以将完整的演示简化为:
完整演示
String[] args = new String[]{"Hi!", "I", "am", "a", "demo"};
List<String> list = Arrays.asList(args).sublist(1, args.length);
String message = String.join(" ", list);
System.out.println("Message: " + message);
那么你就不需要buildMessage
方法了。
我正在 java 中开发一个游戏插件,但无法解决这个问题。我想在 args[1]
之后收集所有内容。这里有一些代码,所以你可以更好地理解。
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(sender instanceof Player) {
Player player = (Player) sender;
if(player.hasPermission("essentials.allow.kick")) {
if(args.length == 0) {
player.sendMessage(ChatColor.RED + "Please specify player name.");
}
if(args.length == 1) {
Player target = Bukkit.getPlayer(args[0]);
if(!target.isValid()) {
player.sendMessage(ChatColor.RED + "That player is not on server!");
}else {
target.kickPlayer(ChatColor.RED + "The kick reason has been told!");
}
}
if(args.length > 1) {
Player target = Bukkit.getPlayer(args[0]);
if(!target.isValid()) {
player.sendMessage(ChatColor.RED + "That player is not on server!");
}
else {
String message = Stream.of(args).skip(2).collect(Collectors.toList()).toString();
target.kickPlayer(ChatColor.RED + message);
}
}
}
}
return true;
}
它只输出[]
。
为了收集n-th元素之后的数组的所有元素,可以使用ArrayList
class的subList(int fromIndex, int toIndex)
函数。文档说:
Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive.
因此您需要将数组转换为 List
,然后在其上调用函数 subList
。
List<String> list = Arrays.asList(args).sublist(1, args.length);
// Replace number 1 with the start index where you want to trim. (Inclusive)
现在,如果您想将该列表转换为字符串,您可以使用以下函数:
public String buildMessage(List<String> list, String separator) {
StringBuilder sb = new StringBuilder();
for (String s: list) {
sb.append(s).append(separator);
}
return sb.toString();
}
然后调用它:
String message = buildMessage(list, " "); // It will separate the arguments with spaces.
完整演示
String[] args = new String[]{"Hi!", "I", "am", "a", "demo"};
List<String> list = Arrays.asList(args).sublist(1, args.length);
String message = buildMessage(list, " ");
System.out.println("Message: " + message);
产生的输出:
Message: I am a demo
让我知道这是否适合您!
编辑
如 @Holger 的评论所述,您可以将完整的演示简化为:
完整演示
String[] args = new String[]{"Hi!", "I", "am", "a", "demo"};
List<String> list = Arrays.asList(args).sublist(1, args.length);
String message = String.join(" ", list);
System.out.println("Message: " + message);
那么你就不需要buildMessage
方法了。