Java 如何从ArrayList中删除括号<;字符串>;
因此,我正在为Minecraft服务器制作一个插件,我必须从一个类到另一个类获取我的命令参数,在尝试了多种方法后,我开始使用ArrayList,它在大部分情况下都有效,但它使用了括号 争论Java 如何从ArrayList中删除括号<;字符串>;,java,arraylist,minecraft,Java,Arraylist,Minecraft,因此,我正在为Minecraft服务器制作一个插件,我必须从一个类到另一个类获取我的命令参数,在尝试了多种方法后,我开始使用ArrayList,它在大部分情况下都有效,但它使用了括号 争论 ArrayList<String> target = Main.target; @EventHandler public void invClickEvent(InventoryClickEvent e) { Inventory inv = e.getInvento
ArrayList<String> target = Main.target;
@EventHandler
public void invClickEvent(InventoryClickEvent e) {
Inventory inv = e.getInventory();
Player player = (Player) e.getWhoClicked();
String name = inv.getName();
if ( name.equals(ChatColor.RED + "Ban Menu")) {
e.setCancelled(true);
int slot = e.getSlot();
if (slot < 0)
{
return;
}
if (slot == 0)
{
player.performCommand("kill " + target);
player.closeInventory();
return;
}
public static ArrayList<String> target = new ArrayList<String>();
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender instanceof Player && args.length == 1)
{
Player p = (Player) sender;
if (args.length > 0) {
switch (args.length)
{
case 1:
Player player = Bukkit.getPlayer(args[0]);
if (player == null) {
sender.sendMessage("That player is not online");
} else if (player.isOnline()) {
Menus.openMenu(p);
target.add(player.getPlayerListName());
}
ArrayList target=Main.target;
@事件处理程序
公共无效invClickEvent(目录ClickEvent e){
存货存货=e.getInventory();
Player=(Player)e.getWhoClicked();
字符串名称=inv.getName();
if(name.equals(ChatColor.RED+“禁止菜单”)){
e、 setCancelled(真);
int slot=e.getSlot();
如果(插槽<0)
{
回来
}
如果(插槽==0)
{
玩家。执行命令(“杀死”+目标);
player.closeInventory();
回来
}
这就是给我带来麻烦的代码。它从我的主类中提取数据。它从ArrayList中提取参数中的文本
ArrayList<String> target = Main.target;
@EventHandler
public void invClickEvent(InventoryClickEvent e) {
Inventory inv = e.getInventory();
Player player = (Player) e.getWhoClicked();
String name = inv.getName();
if ( name.equals(ChatColor.RED + "Ban Menu")) {
e.setCancelled(true);
int slot = e.getSlot();
if (slot < 0)
{
return;
}
if (slot == 0)
{
player.performCommand("kill " + target);
player.closeInventory();
return;
}
public static ArrayList<String> target = new ArrayList<String>();
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender instanceof Player && args.length == 1)
{
Player p = (Player) sender;
if (args.length > 0) {
switch (args.length)
{
case 1:
Player player = Bukkit.getPlayer(args[0]);
if (player == null) {
sender.sendMessage("That player is not online");
} else if (player.isOnline()) {
Menus.openMenu(p);
target.add(player.getPlayerListName());
}
public static ArrayList target=new ArrayList();
公共布尔onCommand(CommandSender、Command cmd、字符串标签、字符串[]args){
if(播放机的发送方实例&&args.length==1)
{
玩家p=(玩家)发送者;
如果(args.length>0){
开关(参数长度)
{
案例1:
Player=Bukkit.getPlayer(args[0]);
if(player==null){
sender.sendMessage(“该播放器未联机”);
}else if(player.isOnline()){
菜单.openMenu(p);
add(player.getPlayerListName());
}
这就是数组提取参数的地方。输出类似于player执行的命令:/kill[HoloPanio]
,我希望它输出player执行的命令:/kill HoloPanio
如果有其他方法导入参数,请让我知道,如果没有,请告诉我如何解决此问题
谢谢!这是因为ArrayList类的toString方法 扩展ArryList类并重写toString
ArrayList<String> list = new ArrayList<String>()
{
private static final long serialVersionUID = 1L;
@Override public String toString()
{
return super.toString().substring(1,super.toString().length-1) ;
}
};
ArrayList list=new ArrayList()
{
私有静态最终长serialVersionUID=1L;
@重写公共字符串toString()
{
返回super.toString().substring(1,super.toString().length-1);
}
};
从Minecraft的角度来说绝对没有什么,如果你想得到元素列表而不必打印集合,你可以用一个StringJoiner
来聚合它
String values = String.join(",", target);
System.out.println(values);
只是对提图斯在评论中说的话进行了进一步的阐述 不要使用
ArrayList
,尝试使用String
作为目标的类型。这将允许玩家执行输出命令:/kill HoloPanio
String target = Main.target;
@EventHandler
public void invClickEvent(InventoryClickEvent e) {
Inventory inv = e.getInventory();
Player player = (Player) e.getWhoClicked();
String name = inv.getName();
if ( name.equals(ChatColor.RED + "Ban Menu")) {
e.setCancelled(true);
int slot = e.getSlot();
if (slot < 0)
{
return;
}
if (slot == 0)
{
player.performCommand("kill " + target);
player.closeInventory();
return;
}
同样正如提图斯所说,这不是最好的解决方案,因为作为一个静态变量,
目标可能会在您不希望它改变时改变(或者在您希望它改变时,它最终会保持不变)。但是,这应该可以解决命令问题。这是默认的ArrayList-toString
使用to String.join删除括号
String result = String.join("", list);
这是因为ArrayList.toString()
的结果就是这样的。如果您只想保持对一个String
的引用,那么使用String
变量而不是ArrayList
可以告诉我更具体的结果吗?而不是公共静态ArrayList target=new ArrayList()
使用公共静态字符串目标;
而不是target.add(player.getPlayerListName());
使用target=player.getPlayerListName()
。这会让它工作起来,但在我看来并不是一个最佳的解决方案。你是什么意思?仅仅为了获得这个功能而扩展一个类是非常困难的,而且很难维护。很少有开发人员会立即通过继承来解决这样的问题。有更好的方法来打印集合。Inheritance不是其中之一。当我这样做时,看起来它没有设置变量