我正在使用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 =数据访问对象)
答案 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);
}
}
只是一个想法 - 用这种方式调试可能更容易。