扫描仪 - 管理来自文本文件的输入

时间:2012-05-13 03:50:58

标签: java java.util.scanner

我正在使用java Scanner尝试从名为Inventory.txt的文本文件中提取产品信息。

此文件包含此格式的产品数据:

“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”

我正在尝试解析字符串并将它们添加到arraylist中,以便arraylist中的每个元素看起来像这样:

"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 =数据访问对象)

2 个答案:

答案 0 :(得分:2)

您可以在字符串和分隔符上定义扫描程序。 由于|在regex中用作OR组合器,你必须用(double)-backslash掩盖它:

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

答案 1 :(得分:1)

我看到你正在使用一个模式,那些可以派上用场 - 但我只需要每一行并对其进行子串。

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

只是一个想法 - 用这种方式调试可能更容易。