Java向字符串数组中添加字符串

6

你好,我一直在尝试将一个 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 的错误提示,因为它不允许我创建任何新的 String。 我不能修改我的声明 ipList[],因为这需要进行很多修改,我该怎么办?


2
数组具有固定大小。你要么需要创建一个新的大小为新尺寸的数组并将所有内容复制到其中,要么使用 ArrayList,它本质上会执行这个操作。 - MadProgrammer
3个回答

10

Java数组是一个固定长度的(JLS-10.3. Array Creation中提到,数组的长度可以作为一个final实例变量length来使用)。但您可以使用Arrays.copyOf(T[], int)来复制数组并使其长度增加1。例如,像这样的内容:

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]

2
另一个不错的选择。1+ - Hovercraft Full Of Eels
谢谢,问题已经解决了!你是否知道如何仅从actionPerformed中捕获一个回车键?它会重复多次。 - randomnessthatsfunny
移除循环。你只需要添加一次。 - Elliott Frisch

7

你认为这里会发生什么:

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[i + 1],它等于Main.ipList[Main.ipList.length]时会抛出异常,这是有保障的。
你说:

"我不能真正改变我的ipList[]声明,否则整个项目都会混乱。"

有时候你只需要跳进去,搞砸一切,这似乎就是其中之一。如果你需要一个可以扩展的数组,不要使用数组,而应该使用ArrayList<String>

0
你也可以使用来自 java.util 包的 ArrayList<String>!这些列表长度可变,因此不像 String[] 那样长度是固定的。此外,当你添加或删除元素时,它们会在运行时进行相应的调整。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接