2014-10-19 70 views
-1

我所試圖做的是閱讀具有這種線如何讀取文件中的int,text和double並將其存儲到數組列表中?

232131231,隨機名稱的文本文件,23.3232

我只知道如何讀它作爲整個行的字符串。我不知道如何單獨閱讀。這是我的測試代碼。

主要

public class JavaApplication9 
{ 
    int value1; 
    String value2; 
    double value3; 
    ArrayList<String> toBeSplit = new ArrayList(); 
    String[] split; 
    ArrayList <Inventory> productList = new ArrayList<>(); 

    public long ReadFile(String sfile) throws IOException 
      {  
       int x = 0; 
       File inFile = new File(sfile); 
       BufferedReader reader = new BufferedReader(new FileReader(inFile)); 
       String sline = null; 
       while ((sline=reader.readLine()) != null) 
        { 
         toBeSplit.add(x,sline); 
         x++; 
        } 
       reader.close(); 
       return inFile.length(); 
      } 

    public void splitString() 
    { 
     int a = 0; 
     while (a<toBeSplit.size()) 
     { 
      split = toBeSplit.get(a).split(",");    
      value1 = Integer.parseInt(split[0]); 
      value2 = split[1]; 
      value3 = Double.parseDouble(split[2]); 
      productList.add(new Inventory (value1,value2,value3)); 
      a++; 
     } 
    } 

    public void OutputLines() 
    { 
     for (Inventory e : productList) 
     { 
      System.out.println (e.getBarcode() +"\t"+ e.getName()+"\t"+ e.getPrice()); 
     } 
    } 

    public static void main(String[] args) 
    { 
     try 
     { 
      JavaApplication9 instance = new JavaApplication9(); 
      instance.ReadFile("Products (1).csv"); 
      instance.splitString(); 
      instance.OutputLines(); 
     } 
     catch (IOException e) 
     { 
      System.out.print ("Error"); 
     } 
    } 
} 

和我的Inventory類

public class Inventory 
{ 
    int barcode; 
    String name; 
    double price; 

    public Inventory (int bars,String pname,double prices) 
    { 
     barcode = bars; 
     name = pname; 
     price = prices; 
    } 

    public int getBarcode() 
    { 
     return barcode; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public double getPrice() 
    { 
     return price; 
    } 

} 

回答

0

使用split(String regex)來拆分字符串。 (關於split(),請參閱javadocs) 然後,您可以按照需要的方式單獨解析每個值。

下面是使用你的數據爲例:

String toBeSplit = "232131231, random name, 23.3232"; 
String[] split = toBeSplit.split(","); 
int value1 = Integer.parseint(split[0].trim()); 
String value2 = split[1].trim(); 
double value3 = Double.parseDouble(split[2].trim()); 

我用trim()(見javadocstrim())擺脫分裂後留下的空白的。

這裏的另一種方式做到這一點不trim():(只需添加一個空格分割的正則表達式中)

String toBeSplit = "232131231, random name, 23.3232"; 
String[] split = toBeSplit.split(", "); 
int value1 = Integer.parseint(split[0]); 
String value2 = split[1]; 
double value3 = Double.parseDouble(split[2]); 
+0

嘿,我已經做了你所說的話。由於某些原因程序無法運行。 異常在線程 「主」 java.lang.NumberFormatException:對於輸入字符串: 「01001010100011」 \t在java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) \t在java.lang.Integer.parseInt(整數的.java:495) \t在java.lang.Integer.parseInt(Integer.java:527) \t在javaapplication9.JavaApplication9.splitString(JavaApplication9.java:36) \t在javaapplication9.JavaApplication9.main(JavaApplication9.java: 58) – 2014-10-19 03:21:40

+0

@ZJJTeoh一個整數的最大值是2,147,483,647。這是因爲int只能存儲32個字節。您試圖存儲數量遠遠大於2147483647的數字1001010100011(解析int時省略前導零)。嘗試使用Long.parseLong(String)並將變量類型設置爲long。多頭是64位,並且可以存儲多達9223372036854775807. – 2014-10-19 03:50:05

+0

是我想到了。非常感謝 – 2014-10-19 03:50:56

0

您可以使用split(String regex)這一點。
考慮一個簡單的例子:

String mystr = "232131231, random name, 23.3232"; 
List<String> list = Arrays.asList(mystr.split(", ")); 
for(String str : list){ 
    System.out.println(str); 
} 


輸出:

232131231 
random name 
23.3232 

如果你想獲得列表爲ArrayList特別,你可以使用ArrayList(Collection list)版本的ArrayList

ArrayList list = new ArrayList(Arrays.asList(mystr.split(", "))); 
相關問題