【问题标题】:Java Adding string to a string array [duplicate]Java将字符串添加到字符串数组[重复]
【发布时间】:2015-11-28 05:22:20
【问题描述】:

您好,我一直在尝试将 String 添加到 String[]。这是我所拥有的,

static String[] ipList = {"127.0.0.1", "173.57.51.111", "69.696.69.69"};
@Override
public void actionPerformed(ActionEvent e) {
    String newIpGet = textfield.getText();
    try {
        for ( int  i = 0; i < Main.ipList.length; i++){
            Main.ipList[i+1] = newIpGet.toString(); // <---- *****
            Main.write(Main.ipList[i]);
        }
    } catch (IOException e1) {
        e1.printStackTrace();
    }

    Main.amountOfIps = Main.amountOfIps + 1;

    System.out.println("Text Entered!");
    System.out.println("There are now " +Main.ipList.length + " Ips.");
    textfield.setVisible(false);

    label.setVisible(true);;
}

但是,我不断收到java.lang.ArrayIndexOutOfBoundsException,因为它不会让我创建任何新的Strings。如果不进行大量修改,我无法修改我的ipList[] 声明,我该怎么办?

【问题讨论】:

  • 数组有固定的大小。您要么需要创建一个新大小的新数组并将所有内容复制到其中,要么使用ArrayList,这基本上就是这样做的

标签: java arrays string


【解决方案1】:

Java 数组的长度是固定的(JLS-10.3. Array Creation 部分表示,数组的长度可用作final 实例变量length)。但是您可以使用Arrays.copyOf(T[], int) 复制数组并使其更长。例如,类似,

String[] ipList = { "127.0.0.1" };
System.out.println(Arrays.toString(ipList));
int len = ipList.length;
ipList = Arrays.copyOf(ipList, len + 1);
ipList[len] = "192.168.2.1";
System.out.println(Arrays.toString(ipList));        

输出是

[127.0.0.1]
[127.0.0.1, 192.168.2.1]

【讨论】:

  • 另一个不错的选择。 1+
  • 感谢您解决了我的问题!您是否碰巧知道如何仅从 acntionPerformed 捕获 1 个输入?它不断重复多次?
  • 删除循环。您只想添加一次。
【解决方案2】:

你认为这里会发生什么:

for ( int  i = 0; i < Main.ipList.length; i++){
    Main.ipList[i+1] = newIpGet.toString();
    Main.write(Main.ipList[i]);
}

i == Main.ipList.length - 1,您尝试访问等于Main.ipList[Main.ipList.length]Main.ipList[i + 1]?这保证会引发您看到的异常。

你说:

“我不能真正改变我对 ipList[] 的声明,否则它会搞砸我的整个项目。”

有时你不得不冒险把一切都搞砸了,这看起来就是其中之一。如果您需要可扩展的数组,请不要使用数组,而应使用 ArrayList&lt;String&gt;

【讨论】:

    【解决方案3】:

    您也可以使用java.util 包中的ArrayList&lt;String&gt;!这些是可变长度的,因此不像String[] 那样长度不可变。此外,当您添加或删除某些内容时,它们会“即时”执行。

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 2019-08-30
      • 2016-06-10
      • 2021-03-10
      • 2016-08-02
      • 1970-01-01
      • 2012-10-06
      • 2013-09-15
      • 2010-12-11
      相关资源
      最近更新 更多