Java 如何从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

因此,我正在为Minecraft服务器制作一个插件,我必须从一个类到另一个类获取我的命令参数,在尝试了多种方法后,我开始使用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());

                  }
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不是其中之一。当我这样做时,看起来它没有设置变量