如何使用 trim() 方法来完成这项工作?我需要读取 txt 文件,同时忽略空白行和以 "//" 开头的行


public void readToooooolData(String fileName) throws FileNotFoundException
{
File dataFile = new File(fileName);
Scanner scanner = new Scanner(dataFile);
scanner.useDelimiter("( *, *)|(\s*,\s*)|(rn)|(n)");
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
if(!line.startsWith("//") || !(scanner.nextLine().startsWith(" ") )) {
String toolName = scanner.next();
String itemCode = scanner.next();
int timesBorrowed = scanner.nextInt();
boolean onLoan = scanner.nextBoolean();
int cost = scanner.nextInt();
int weight = scanner.nextInt();
storeTool( new Tool(toolName, itemCode, timesBorrowed, onLoan, cost, weight) );
scanner.nextLine();
} 
scanner.close();
}
}

txt文件:

// this is a comment, any lines that start with //
// (and blank lines) should be ignored
// data is toolName, toolCode, timesBorrowed, onLoan, cost, weight  
Makita BHP452RFWX,RD2001, 12 ,false,14995,1800  
Flex Impact Screwdriver FIS439,RD2834,14,true,13499,1200  
DeWalt D23650-GB Circular Saw, RD6582,54,true,14997,5400  
Milwaukee DD2-160XE Diamond Core Drill,RD4734,50,false,38894,9000  
Bosch GSR10.8-Li Drill Driver,RD3021,25, true,9995,820  
Bosch GSB19-2REA Percussion Drill,RD8654,85,false,19999,4567  
Flex Impact Screwdriver FIS439, RD2835,14,false,13499,1200  
DeWalt DW936 Circular Saw,RD4352,18,false,19999,3300  
Sparky FK652 Wall Chaser,RD7625,15,false,29994,8400  

您的代码存在一些问题。

  • 最好使用try with resources打开扫描仪

  • 您指定的某些分隔符是重复的,有些是不必要的。空间包含在s中,因此(s*,s*)( *, *)的副本,不需要(rn)|(n)

  • 你从文件中读取一行,并测试是否是注释或空行-好。然后你需要从已经读取的行中提取标记,但你不能使用scanner.next(),因为它会在你刚刚读取的行之后为你检索下一个标记。因此,您的代码实际要做的是尝试解析非注释/非空行之后的行上的信息。

  • 在循环的末尾还有另一个scanner.nextLine(),因此您可以从文件中多跳过一行。

public void readToooooolData(String fileName) throws FileNotFoundException {
File dataFile = new File(fileName);
try (Scanner scanner = new Scanner(dataFile)) {
while (scanner.hasNextLine()) {
String line = scanner.nextLine().trim();
if (line.startsWith("//") || line.isEmpty()) {
continue;
}
String tokens[] = line.split("\s*,\s*");
if (tokens.length != 6) {
throw new RuntimeException("Wrong data file format");
}
String toolName = tokens[0];
String itemCode = tokens[1];
int timesBorrowed = Integer.parseInt(tokens[2]);
boolean onLoan = Boolean.parseBoolean(tokens[3]);
int cost = Integer.parseInt(tokens[4]);
int weight = Integer.parseInt(tokens[5]);
storeTool( new Tool(toolName, itemCode, timesBorrowed, onLoan, cost, weight) );
}
}
}

最新更新