Как объявить динамический массив String в Java
Я использую String Array объявить как zoom z[]=new String[422];
. Но этот массив хранит значение от 0
до 32
, поэтому я получил null pointer exception
после значения цикла 32
.
Как решить эту проблему в java?
Как объявить динамический массив в java?
Ответы
Ответ 1
Вы хотите использовать Set
или List
(например, HashSet
, TreeSet
, и т.д., или ArrayList
, LinkedList
и т.д.), так как Java не имеет массивы с динамическим размером.
List<String> zoom = new ArrayList<>();
zoom.add("String 1");
zoom.add("String 2");
for (String z : zoom) {
System.err.println(z);
}
Изменить:
Вот более краткий способ инициализации вашего списка с произвольным количеством значений с помощью varargs:
List<String> zoom = Arrays.asList("String 1", "String 2", "String n");
Ответ 2
нет, нет возможности сделать динамическую длину массива в java. вы можете использовать ArrayList
или другие List
реализации.
Ответ 3
Возможно, вы ищете Vector
. При необходимости он автоматически расширяется. Это не лучший выбор, но он будет делать в простых ситуациях. Это стоит вашего часа, чтобы читать ArrayList
.
Ответ 4
Что вы ищете, это DefaultListModel - Переменная динамической строки.
Вот целый класс, который использует DefaultListModel, как если бы это был TStringList Delphi. Разница заключается в том, что вы можете добавлять строки в список без ограничений, и у вас есть такая же возможность при получении одиночная запись, указав запись int.
Имя_файла: 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.
Ответ 5
Метод Array.newInstance(Class<?> componentType, int length)
должен использоваться для создания массива с динамической длиной.
Многомерные массивы могут быть созданы аналогично методу Array.newInstance(Class<?> componentType, int... dimensions)
.