如何找到文本文件中缺少的分隔符?

时间:2019-04-22 15:45:17

标签: java

程序应从文本文件中读取匹配数据。文件中的每一行都包含特定匹配项的数据。文件中每一行的格式如下:

home_team_name : away_team_name : home_team_score : away_team_score

请注意如何使用冒号(:)分隔输入的不同部分(字段定界符)。

以下是文件中典型数据行的示例。

Arsenal : Spurs : 2 : 1
Everton : Liverpool : 1 : 1
Huddersfield : Chelsea: 2 : 1

文件中存储的数据可能已损坏。为此,程序必须检查从文件读取的每一行数据,识别无效数据,并通过控制台上的消息将其报告给用户。该程序至少应检查并验证以下可能的问题– -字段分隔符可能丢失或使用了错误的字段分隔符。

3 个答案:

答案 0 :(得分:0)

为此,您必须使用String类的两个方法以及一个BufferedReader的方法。这是一些代码

import java.io;

public class Program {

    public static void main(String[] args) {
        String filePath = "c:\temp\in.txt";

        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line = br.readLine();

            while (line != null) {
                String[] fields = line.split(":");
                String[] trimmedFields = new String[fields.length];

                for (int i = 0; i < trimmedField.length; i++) {
                    trimmedFields[i] = fields[i].trim();
                }

                //do your verification with the trimmedFields
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }

    }
}

答案 1 :(得分:0)

您可以在':'处拆分每行,并检查数组长度以检查团队名称和得分是否可用:

     boolean isDataComplete = line.split(":").length ==4;

检查第3个和第4个元素是否为整数值

    boolean isValidScore = line.split(":")[2].trim().matches("\\d+") &&  line.split(":")[3].trim().matches("\\d+")

答案 2 :(得分:0)

简单,进行一个for循环。这将检查您在实际车道内的字符。

但是,要执行此操作,您应该对每行进行限制,以使程序知道何时结束一行。例如|Arsenal : Spurs : 2 : 1|

鉴于此,您将执行以下操作:

BufferedReader br = new BufferedReader(new FileReader(file));  
try {  
    String line;
    int lineDelimeters=0;
    int numberOfDelimeters=0;
    while ((line = br.readLine()) != null) {
       for(char c:line.toCharArray){
          if(c=='|')
             lineDelimeters++;
          else if(c==':')
             numberOfDelimeters++;
          if(numberOfDelimeters<4 && lineDelimeters==2)
             System.out.println("The file is corrupted.")
       }
    }
} finally {
    br.close();
}