Java 读取文件并拆分行

Java 读取文件并拆分行,java,string,file,file-io,bufferedreader,Java,String,File,File Io,Bufferedreader,以下是我书店最后一部分的说明: 通过Bookstore类的read()方法,可以读取关于出版商和书籍的信息,并将其存储在各自的集合中。此方法接收文件路径作为参数。该文件是一个文本,按行组织,并带有字段,以“;”分隔。 如果第一个字段分别包含字母“P”或“B”,则每行都包含关于出版商或书籍的信息。 发布者行在第一行之后包含字段名称、平均送达和电子邮件。 图书行在第一行之后包含标题、作者、年份、价格、出版商名称和数量字段。 该方法必须忽略不符合所述模式的行 你听说过分裂弦吗?请使用以下语法 Stri

以下是我书店最后一部分的说明:

通过Bookstore类的read()方法,可以读取关于出版商和书籍的信息,并将其存储在各自的集合中。此方法接收文件路径作为参数。该文件是一个文本,按行组织,并带有字段,以“;”分隔。 如果第一个字段分别包含字母“P”或“B”,则每行都包含关于出版商或书籍的信息。 发布者行在第一行之后包含字段名称、平均送达和电子邮件。 图书行在第一行之后包含标题、作者、年份、价格、出版商名称和数量字段。
该方法必须忽略不符合所述模式的行 你听说过分裂弦吗?请使用以下语法

String[] splitedString = s.split(";");
然后循环中的代码可以这样更改

String[] splitedString = s.split(";");
if(splitedString[0].length==1 && !(splitedString[0].equalsIgnoreCase("p") || splitedString[0].equalsIgnoreCase("b"))) {
        System.out.println("Line not conform");
} else if(splitedString[0].equalsIgnoreCase(p) && splitedString.length==5) {
            name = splitedString[1];
            average = splitedString[2];
            delivery = splitedString[3];
            email = splitedString[4];
        }
等等

编辑:

对于所有解析int和parse double的代码,请更改它们。保持简单,删除包括if检查在内的所有代码,它们应该尽可能简单

try {
    delivery=Integer.parseInt(splitted[2].trim());
} catch (NumberFormatException) {
    isOk=false;
}

也许您可以使用正则表达式获得更干净(更高效)的代码。目标已实现!但是,出于好奇,我试图省略
trim()
调用(因为我想理解它),结果也是一样的。你为什么认为这是必要的?为了以防万一(在现实编程中,而不是在练习期间),我不知道没有空格?Trim基本上会删除字符串开头或结尾的空格。。。是的,这只是预防措施。。。。
String[] splitedString = s.split(";");
if(splitedString[0].length==1 && !(splitedString[0].equalsIgnoreCase("p") || splitedString[0].equalsIgnoreCase("b"))) {
        System.out.println("Line not conform");
} else if(splitedString[0].equalsIgnoreCase(p) && splitedString.length==5) {
            name = splitedString[1];
            average = splitedString[2];
            delivery = splitedString[3];
            email = splitedString[4];
        }
try {
    delivery=Integer.parseInt(splitted[2].trim());
} catch (NumberFormatException) {
    isOk=false;
}