2012-07-23 104 views
3

我想將從文件中獲取的字符串轉換爲數組列表。我想是這樣,但它不工作:使用java將字符串[]轉換爲Arraylist <String>

import java.io.*; 
import java.util.*; 

public class Data 
{ 
    static File file = DataSaver.file; 
    static List<String> data = new ArrayList<String>(512); 
    public static void a() throws Exception 
    { 
     FileInputStream fis = new FileInputStream(file); 
     DataInputStream dis = new DataInputStream(fis); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(dis)); 
     if(!file.exists()) 
     { 
      throw new IOException("Datafile not found."); 
     } 
     else 
     { 
      String[] string = reader.readLine().split("$"); 
      for(int i = 0; i < string.length; i++) 
      { 
       data.add(string[i]); 
      } 
     } 
     dis.close(); 
     System.out.println(data.toString()); //for debugging purposes. 
    } 
} 

輸出繼電器: [$testdata1$testdata2$]

通緝輸出: [testdata1, testdata2]

文件內容: $testdata1$testdata2$

有人可以幫助我?

+0

爲什麼你在調用一個'String'串'的數組嗎? – 2012-07-23 18:17:44

+0

爲什麼不呢?你對單詞'string'有問題嗎? – Rheel 2012-07-23 18:25:29

+0

這是一個糟糕的變量名稱。 Java可能會允許它,因爲它對類不區分大小寫,但在C#中不起作用(其中'string'是'String'的別名)。此外,它並沒有真正描述變量中包含的內容。 – 2012-07-23 18:26:35

回答

6

String.split需要一個正則表達式而$是一個需要轉義的特殊字符。此外,第一個字符是一個$那麼分裂最終會得到一個空的第一個元素(你需要以某種方式將其刪除,這是一種方式:

String[] string = reader.readLine().substring(1).split("\\$"); 

...或:

String[] string = reader.readLine().split("\\$"); 
for (int i = 0; i < string.length; i++) 
    if (!string[i].isEmpty()) 
     data.add(string[i]); 
+0

謝謝!這工作 – Rheel 2012-07-23 18:20:14

+0

沒有問題@ user1546467,很高興有幫助!:) – dacwe 2012-07-23 18:30:21

1

你需要轉義特殊字符\\

更改分裂聲明類似下面

String[] string = reader.readLine().split("\\$"); 
3

1.使用("\\$")刪除"$"的特殊含義。

2.使用Arrays.asList()轉換的Array TO ArrayList

從Java文檔:

返回由指定數組支持的固定大小的列表。 (對返回列表進行「直寫」到數組的更改。)此方法充當基於數組和基於集合的API之間的橋樑,並結合使用Collection.toArray()。返回的列表是可序列化的並實現RandomAccess。

此方法還提供了一個方便的方法來創建初始化爲包含多個元素固定大小的列表:

如:

String[] string = reader.readLine().split("\\$"); 

ArrayList<String> arr = new ArrayList<String>(Arrays.asList(string)); 
+0

@dacwe不是來自Arrays.asList()直接支持的數組列表?這意味着幾乎沒有開銷。 – Stefan 2012-07-23 20:31:16

0

添加到@dacwe

String[] string = reader.readLine().substring(1).split("\\$"); 
List<String> data =Arrays.asList(string); 
+0

如果你想貢獻他的答案,編輯它或留下評論。 – 2012-07-23 18:27:13

+0

好吧,但@ user1546467想要一個'ArrayList'('asList'返回一個由數組支持的列表)。 – dacwe 2012-07-23 18:29:39

相關問題