作者:c33454059 | 来源:互联网 | 2023-09-23 11:30
传入的模式和格式(均为小写),如果模式和格式不区分大小写,如何更改下面的代码段,以便startsWith和endsWith返回true?try(StreampathsF
传入的模式和格式(均为小写),如果模式和格式不区分大小写,如何更改下面的代码段,以便startsWith和endsWith返回true?
try (Stream paths = Files.find(cobDir, 1,
(path, attrs) -> attrs.isRegularFile()
&& path.getFileName().startsWith(pattern)
&& path.toString().endsWith(format))) {
matchingFile = paths.findFirst();
} catch (IOException e) {
logger.error("Problem with getting files to process {}", e.getMessage());
}
是否有比下面更漂亮的方法:
try (Stream paths = Files.find(cobDir, 1,
(path, attrs) -> attrs.isRegularFile()
&& path.getFileName().toString().toLowerCase().startsWith(pattern)
&& path.toString().toLowerCase().endsWith(format))) {
matchingFile = paths.findFirst();
} catch (IOException e) {
logger.error("Problem with getting files to process {}", e.getMessage());
}
解决方法:
解决方案1:不测试大小写,只需将输入/测试值更改为小写&只需检查小写字母即可:-
try (Stream paths = Files.find(cobDir, 1,
(path, attrs) -> attrs.isRegularFile()
&& path.getFileName().toLowerCase().startsWith(pattern)
&& path.toString().toLowerCase().endsWith(format))) {
matchingFile = paths.findFirst();
} catch (IOException e) {
logger.error("Problem with getting files to process {}", e.getMessage());
}
解决方案2:将正则表达式(您未包括在内)更改为not take case into account:-
是否有更好的格式化方法,是的:-
try (Stream paths = getPaths()){
...
}
并将所有丑陋的东西粘贴在一个函数中:
private Stream getPaths(/** cobDir, pattern, format */){
return Files.find(cobDir, 1,
(path, attrs) -> attrs.isRegularFile()
&&
path.getFileName().toString().toLowerCase().startsWith(pattern)
&& path.toString().toLowerCase().endsWith(format))
}