2016-12-11 4 views
0

基本的に私はトランザクションの詳細を出力するファイルを持っています。私は口座ID、金額、日付を取得してリストに入れなければなりません。 これまでのところ、必要な情報を取得してリストに入れることはできません。テキストファイルのデータをリストに入れる方法は?

Transaction on account 00000007: amount 50, dated Tue Dec 06 15:54:35 GMT 2016 

は、だから私は00000007、50と日付を取得し、リスト内でそれを配置する必要があります。ファイルが見えます

はそれを気に入っています。これは私が立ち往生している場所です。ここで

はリストである: private List<Transaction> pendingTransactions, completedTransactions;

これまでのところ、ここで私が持っているコードです:あなたの助け

+1

このコードにはどのような問題がありますか?テキストファイルはどのように見えますか?デバッガやprintlnステートメントの使用など、デバッグの取り組みは何を示していますか? –

+0

私は自分の質問を編集しました。今は十分ですか? – TheHunter

+2

もう一度、あなたはどんな問題を抱えていますか?あなたはあなたの質問にもっと具体的になることができますか?現在作業要求のように読み込まれています。主な問題は次のとおりです。 –

答えて

0

ため

public void loadPendingTransactions() 
{ 
    try { 
     Scanner scnr = new Scanner(new File("pendingTransactions.txt")); 
     String content; 

     while((content = scnr.readLine()) != null) { 
      String arr[] = content.split(" "); 
      int amnt[] = content.split(" "); 
      String accID = arr[4]; 
      int amt = arr[6]; 
      String date = arr[7]; 
      pendingTransacrions.add(new Transaction(accID, amt, date)); 
     } 
     scnr.close(); 

    } catch (FileNotFoundException e) { 
     System.out.println("We're sorry, we are unable to find that file: \n" + e.getMessage()); 
    } catch (IOException e) { 
     System.out.println("We're sorry, we are unable to find that file: \n" + e.getMessage()); 
    } 

おかげで行毎にファイルを読み込むと、すべてを一致させるようにしてくださいは、同じ正規表現に改行してください。一致するたびに新しいトランザクションオブジェクトを作成し、それをリストに追加します。

package org.example; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.List; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class TransactionLoader { 

    public static void main(String[] args) throws Exception { 
     String pathToFile = "transactions.txt"; 
     TransactionLoader loader = new TransactionLoader(); 
     List<Transaction> transactions = loader.loadTransactions(pathToFile); 
     System.out.println("\n\nResults:\n"); 
     for(Transaction t : transactions) { 
      System.out.printf("Transaction ID: %s, amount: %s, date %s%n", t.id, t.amount, t.date); 
     } 
    } 

    private List<Transaction> loadTransactions(String pathToFile) throws Exception { 
     Pattern pattern = Pattern.compile("^Transaction on account (\\d+): amount (\\d+), dated (.+)$"); 
     List<Transaction> transactions = new ArrayList<>(); 
     try(FileInputStream fis = new FileInputStream(new File(pathToFile)); 
       InputStreamReader reader = new InputStreamReader(fis, "UTF-8"); 
       BufferedReader br = new BufferedReader(reader)) { 
      String line; 
      while((line = br.readLine()) != null) { 
       Matcher matcher = pattern.matcher(line); 
       if(matcher.matches()) { 
        Transaction tx = new Transaction(); 
        tx.id = Long.parseLong(matcher.group(1)); 
        tx.amount = Integer.parseInt(matcher.group(2)); 
        tx.date = new Date(Date.parse(matcher.group(3))); 
        transactions.add(tx); 
       } else { 
        System.out.println("Line does not match: " + line); 
       } 
      } 
     } 
     return transactions; 
    } 

    private static class Transaction { 
     public long id; 
     public int amount; 
     public Date date; 
    } 

} 
関連する問題