2017-08-04 70 views
0

我試圖計算出保險單列表中項目的平均數量,如何從文本中獲取項目(int)的值文件?從文本文件中的一行中讀取特定數據類型

這裏是在文本文件數據的一個示例:

20-Jul-2017 EQ123B 3 40000 30 A 5389 l a 
20-Jul-2017 ED423A 2 40000 30 A 5389 k d 
31-Jul-2017 ZD123V 4 40000 30 A 5389 s c 

的每一行代表一個不同的保單數據,與第三列是被保險人的物品的量。我計劃通過獲取文件中的項目總數並將其除以策略數量來計算每項策略的平均項目數。

這是到目前爲止我的代碼:

try{ 
     int numOfPolicies = 0; 
     try (Scanner file = new Scanner(new FileReader("policy.txt"))) { 

      //loop through the file counting each line. Each line represents a policy 
      while(file.hasNextLine()){ 

       numOfPolicies++; 
       file.nextLine(); 
      } 
     } 
     System.out.println("Total Number of Policies: " + numOfPolicies); 

    } 
    catch(FileNotFoundException e){ 

     System.out.println("File not found"); 
    } 

正如你可以看到我已經得到的文件中策略的數量。我如何只讀取每行中的項目數量,並將其存儲在一個變量中?

+0

嘗試用捕獲組,它會給你只能做你想要得到什麼樣的數量 – Lino

+0

一個正則表達式, 哪個數字? –

+0

@YCF_L每行的第三個元素,例如第一行中的3 – Liam

回答

3

如果你的行按照此格式(空格只能用作分隔符):

20-Jul-2017 EQ123B 3 40000 30 A 5389 l a 

要檢索3,你可以捕捉到第二和第三之間的空白的數量。

String[] split = file.nextLine().split("\\s+", 4); 

您將獲得下列憑證:


你可以的保單數目後使用String.split()方法與\\s正則表達式和4一個極限,你不在乎令牌20-JUL-2017

EQ123B

40000 30 A 5389 LA

你可以得到這樣的第三代幣:

String number = split[2]; 
+0

's'在's.split ...'中的含義是什麼?我是否需要將該字符串設置爲等於整行? – Liam

+0

's'是讀線。我更新了。你可能不會使用'BufferedReader'來代替Scanner,而是通過使用read(char cbuf [],int off,int len)來讀取一個「小」 – davidxxx