0

Inventory.txt というテキスト ファイルから製品情報を抽出しようとしている Java Scanner を使用しています。

このファイルには、製品に関するデータが次の形式で含まれています。

“Danelectro|Bass|D56BASS-AQUA|336177|395.00Orange|Amplifier|BT1000-H|319578|899.00Planet Waves|Superpicks|1ORD2-5|301075|4.50Korg|X50 Music Synthesizer|X50|241473|735.00Alpine|Alto Sax|AAS143|198490|795.00”

文字列を解析して配列リストに追加し、配列リストの各要素が次のようになるようにしようとしています。

"Danelectro|Bass|D56BASS-AQUA|336177|395.00"
"Orange|Amplifier|BT1000-H|319578|899.00"    
"KorPlanet Waves|Superpicks|1ORD2-5|301075|4.50"
"g|X50 Music Synthesizer|X50|241473|735.00"
"Alpine|Alto Sax|AAS143|198490|555.00”

以下は私のコードです:

public class ItemDao {        
    public ItemDao() {
        scanFile();
    }

    public void scanFile() {
        Scanner scanner; 
        ArrayList <String> content = new ArrayList <String>();
        try {
            Pattern p1 = Pattern.compile("\\.[0-9]{2}$");
            scanner = new Scanner(new File("Inventory.txt"));

            while (scanner.hasNext(p1)) {
                content.add(scanner.next(p1));
            }

            for (String item : content) {
                System.out.println("Items:" + item);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

このコードをテストしたところ、arraylist が空であることがわかりました。どんな助けでも大歓迎です。

java -jar A00123456Lab5.jar

dao パッケージに ItemDAO クラスを作成します。このクラスには、Comparator (DAO = データ アクセス オブジェクト) を実装する静的内部クラスが含まれます。

4

2 に答える 2

2

String と delimiter で Scanner を定義できます。以来 | ORコンビネータとして正規表現で使用されている場合は、(ダブル)バックスラッシュでマスクする必要があります:

sc = new java.util.Scanner ("Danelectro|Bass|D56BASS-AQUA|336177|395.00");
sc.useDelimiter ("\\|");

String name = sc.next ();
// name: java.lang.String = Danelectro
String typ = sc.next ();
// typ: java.lang.String = Bass
String model = sc.next
// model: java.lang.String = D56BASS-AQUA
int id = sc.nextInt ();
// id: Int = 336177
val d = sc.nextDouble ();
// d: Double = 395.0
于 2012-05-13T11:32:54.833 に答える
1

パターンを使用していることがわかりましたが、それらは便利です--しかし、各行を取得して部分文字列にするだけです。

while(scanner.hasNextLine()){
    String temp = scanner.nextLine();
    while(temp.indexOf("|") != -1){
        content.add(temp.substring(temp.indexOf("|"));
        temp.substring(temp.indexOf("|")+1);
    }    
}

考えてみると、この方法でデバッグする方が簡単かもしれません。

于 2012-05-13T05:07:17.593 に答える