文件名验证

nan*_*r94 1 java string java-8 java-stream

我每分钟在一个线程中验证目录中的许多文件.目前我正在使用下面的功能,工作正常.我的问题是我是否可以重写此方法以更快地运行(java8?),并希望缩短.

public boolean validateFile(String fileName) {
    fileName = fileName.substring(0, fileName.lastIndexOf('.'));
    String[] values = fileName.split("_");
    if (values.length == 4) {
        if(!values[1].matches("0*")) {
            if(!fileName.contains(" ")) {
                if(values[3].equals("PASS") || values[3].equals("FAIL")) {
                    return true;
                }
            }
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

验证规则:

  1. 文件名不能包含任何空格字符.
  2. 文件名拆分器始终为_字符.
  3. 值[1]不能只包含零(0).它必须有12位数字.
  4. 值[3]必须包含"PASS"或"FAIL".
  5. 数组值[]长度必须始终为4.

您可以使用http://ideone.com/dh8j9M上的文件名示例运行和分叉此代码

Eug*_*ene 5

这样的事情 - 只是将分支转换为java-8的简单转换.可能更具可读性,但速度不快.

 return Optional.ofNullable("test") // your fileName
            .filter(x -> !x.contains(" "))
            .map(x -> x.substring(0, x.lastIndexOf(".")))
            .map(x -> x.split("_"))
            .filter(arr -> arr.length == 4)
            .filter(arr -> !arr[1].matches("0*"))
            .filter(arr -> arr[3].equals("PASS") || arr[3].equals("FAIL"))
            .isPresent();
Run Code Online (Sandbox Code Playgroud)