2010-08-30 38 views
20

我正在使用字符串數組聲明爲zoom z[]=new String[422];。但是這個數組存儲的值從032,所以我得到null pointer exception後循環值32如何在Java中聲明動態字符串數組

如何在java中解決這個問題?

我該如何在java中聲明一個動態數組?

+7

如果只是有一種描述某些代碼的方式,比如....我不知道,給我們看代碼... – skaffman 2010-08-30 14:56:37

回答

39

您想使用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<String> zoom = Arrays.asList("String 1", "String 2", "String n"); 
+0

注意,這應該是「ArrayList」,而不是「List」;這給我帶來了一些問題。 – 2013-03-24 18:40:13

+0

使用'列表'是正確的。爲了討論爲什麼,Joshua Bloch解決了[Effective Java - Item 52:通過其接口引用對象]中的接口的使用(http://jtechies.blogspot.com/2012/07/item-52-refer-to-objects逐their.html)。 – Chadwick 2013-03-29 06:53:42

+0

當我嘗試使用JDK 1.6和1.7時,會導致編譯錯誤。我不相信,不會引起爭論警告。 – 2013-04-02 08:00:28

5

不,沒有辦法在java中使數組長度動態化。您可以使用ArrayList或其他List實現。

3

也許你正在尋找Vector。如果需要,它的容量會自動擴展。這不是最好的選擇,但會在簡單的情況下完成。您值得花時間閱讀ArrayList

0

你在找什麼是DefaultListModel - 動態字符串列表變量。

這是一個使用DefaultListModel的整個類,就好像它是Delphi的TStringList一樣。不同之處在於,您可以無限制地將字符串添加到列表中,並且您可以通過指定條目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,雙,等...這樣你就不必從字符串轉換的另一邊。

SaveFile & LoadFile是保存和加載字符串文件和文件。

StrToList & ListToStr是在每個條目之間放置分隔符。

ex。 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.