如何检查文本文件中的字符串是否正确

时间:2017-02-02 14:52:16

标签: java text-files controls

我有一个文本文件,我需要检查它是否正确。该文件应为以下类型:

XYab 
XYab
XYab

其中X,Y,a,b只能取一定范围的值。例如,b必须是1到8之间的值。这些值由4 enum定义(X为1枚举,Y为1枚枚,等等)。我想到的唯一一件事是这样的:

BufferedReader br = new BufferedReader(new FileReader(FILENAME)
String s;
while ((s = br.readLine()) != null) {
    if(s.charAt(0)==Enum.example.asChar())
}

但当然它只检查文件的第一行。关于如何查看所有文件的行的任何建议?

2 个答案:

答案 0 :(得分:0)

你可以尝试这样的东西,(根据你的枚举修改它)

@Test
public void findDates() {
        File file = new File("pathToFile");
        try{
            Assert.assertTrue(validateFile(file));
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }

    private boolean validateFile(File file) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;
        // add yours enumns to one list
        List<Enum> enums = new ArrayList<>();
        enums.add(EnumX);
        enums.add(EnumY);
        enums.add(EnumA);
        enums.add(EnumB);

        while ((line = br.readLine()) != null) {
            // process the line.
            if(line.length() > 4){
                return false;
            }
            //for each position check if the value is valid for the enum
            for(int i = 0; i < 4; i++){
                if(enums.get(i)).valueOf(line.charAt(i)) == null){
                    return false;
                }
            }
        }
        return true;
    }

答案 1 :(得分:0)

不要忘记碰撞,但如果你有数字或字符串,你可以使用正则表达式来做到这一点。

在每个枚举上你必须像这样做一个函数regexp。您可以改用外部助手。

enum EnumX {
    A,B,C,D, ...;
    ...
    // you enum start to 0
    public static String regexp(){
        return "[0-" + EnumX.values().length +"]"; 
    }
}

// it is working also if you have string in your file
enum EnumY{
    A("toto"),B("titi"),C("tata"),D("loto");

    public static String regexp(){
        StringBuilder regexp = new StringBuilder("[");
        for(EnumY value : EnumY.values()){
                regexp.append(value).append(",");
        }
        regexp.replace(regexp.length()-1, regexp.length(), "]");
        return regexp.toString();
    }
}   

public boolean isCorrect(File file){
        // build the regexp         
        String regexp = EnumX.regexp() + EnumY.regexp() + EnumA.regexp() +EnumB.regexp();

        // read the file
        BufferedReader br = new BufferedReader(new FileReader(file));
        String line;

        while ((line = br.readLine()) != null) {
            if (line.matches(regexp) == false){
                // this line is not correct
                return false;
            }
        }
        return true;
}