繁体   English   中英

如何在Java中声明动态String数组

[英]How can I declare dynamic String array in Java

我使用String Array声明为zoom z[]=new String[422]; 但是这个数组存储的值从032 ,所以在循环值32之后我得到了null pointer exception

如何在java中解决这个问题?

如何在java中声明动态数组?

您希望使用SetList实现(例如HashSetTreeSet等,或ArrayListLinkedList等),因为Java没有动态大小的数组。

List<String> zoom = new ArrayList<>();
zoom.add("String 1");
zoom.add("String 2");

for (String z : zoom) {
    System.err.println(z);
}

编辑:这是使用varargs使用任意数量的值初始化List的更简洁方法:

List<String> zoom = Arrays.asList("String 1", "String 2", "String n");

不,没有办法让java中的数组长度动态化。 您可以使用ArrayList或其他List实现。

也许你正在寻找Vector 如果需要,它的容量会自动扩展。 这不是最好的选择,但会在简单的情况下完成。 值得花时间阅读ArrayList

Array.newInstance(Class<?> componentType, int length)方法用于创建动态长度的数组。

可以使用Array.newInstance(Class<?> componentType, int... dimensions)方法类似地创建多维数组。

您正在寻找的是DefaultListModel - 动态字符串列表变量。

这是一个使用DefaultListModel的整个类,就好像它是Delphi的TStringList一样。 区别在于您可以无限制地将字符串添加到列表中,并且通过指定条目int可以获得单个条目。

FileName:StringList.java

package YOUR_PACKAGE_GOES_HERE;

//This is the StringList Class by i2programmer
//You may delete these comments
//This code is offered freely at no requirements
//You may alter the code as you wish
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListModel;

public class StringList {

    public static String OutputAsString(DefaultListModel list, int entry) {
        return GetEntry(list, entry);
    }

    public static Object OutputAsObject(DefaultListModel list, int entry) {
        return GetEntry(list, entry);
    }

    public static int OutputAsInteger(DefaultListModel list, int entry) {
        return Integer.parseInt(list.getElementAt(entry).toString());
    }

    public static double OutputAsDouble(DefaultListModel list, int entry) {
        return Double.parseDouble(list.getElementAt(entry).toString());
    }

    public static byte OutputAsByte(DefaultListModel list, int entry) {
        return Byte.parseByte(list.getElementAt(entry).toString());
    }

    public static char OutputAsCharacter(DefaultListModel list, int entry) {
        return list.getElementAt(entry).toString().charAt(0);
    }

    public static String GetEntry(DefaultListModel list, int entry) {
        String result = "";
        result = list.getElementAt(entry).toString();
        return result;
    }

    public static void AddEntry(DefaultListModel list, String entry) {
        list.addElement(entry);
    }

    public static void RemoveEntry(DefaultListModel list, int entry) {
        list.removeElementAt(entry);
    }

    public static DefaultListModel StrToList(String input, String delimiter) {
        DefaultListModel dlmtemp = new DefaultListModel();
        input = input.trim();
        delimiter = delimiter.trim();
        while (input.toLowerCase().contains(delimiter.toLowerCase())) {
            int index = input.toLowerCase().indexOf(delimiter.toLowerCase());
            dlmtemp.addElement(input.substring(0, index).trim());
            input = input.substring(index + delimiter.length(), input.length()).trim();
        }
        return dlmtemp;
    }

    public static String ListToStr(DefaultListModel list, String delimiter) {
        String result = "";
        for (int i = 0; i < list.size(); i++) {
            result = list.getElementAt(i).toString() + delimiter;
        }
        result = result.trim();
        return result;
    }

    public static String LoadFile(String inputfile) throws IOException {
        int len;
        char[] chr = new char[4096];
        final StringBuffer buffer = new StringBuffer();
        final FileReader reader = new FileReader(new File(inputfile));
        try {
            while ((len = reader.read(chr)) > 0) {
                buffer.append(chr, 0, len);
            }
        } finally {
            reader.close();
        }
        return buffer.toString();
    }

    public static void SaveFile(String outputfile, String outputstring) {
        try {
            FileWriter f0 = new FileWriter(new File(outputfile));
            f0.write(outputstring);
            f0.flush();
            f0.close();
        } catch (IOException ex) {
            Logger.getLogger(StringList.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

OutputAs方法用于输出int,double等条目...这样您就不必从另一侧的字符串转换。

SaveFile和LoadFile用于保存文件和从文件加载字符串。

StrToList和ListToStr用于在每个条目之间放置分隔符。

恩。 1 <> 2 <> 3 <> 4 <>如果“<>”是分隔符,则1 2 3和4是条目。

AddEntry和GetEntry将在DefaultListModel中添加和获取字符串。

RemoveEntry用于从DefaultListModel中删除字符串。

你在这里使用DefaultListModel而不是数组,如下所示:

DefaultListModel list = new DefaultListModel();
//now that you have a list, you can run it through the above class methods.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM