请看下面的代码,基本上我正在检查文件名中的一些特定单词以确定文件的类型。请参阅下面的内容 代码,并告诉我,如果这是最好的方式,否则请建议。
Example File Name : incoming_EMP_data.dat
final String[] files = file.list();
if (files != null && files.length > 0) {
fileName = files[0];
if(files[0].replace("_"," ").indexOf("EMP")!=-1)
System.out.println("EMP file");
else
System.out.println("NOT EMP file");
}
如果文件名有incoming_ TEMP _data.dat,上面的代码也会通过,我看起来很准确,
问候,
MKR
答案 0 :(得分:0)
文件名有图案吗?我的意思是,总会像“ ”一样?
如果是,您可以将代码更改为:
if(files[0].indexOf("_EMP_") != -1)
问候。
答案 1 :(得分:0)
例如,可以使用正则表达式和单词boundary matcher \b
:
String[] examples = {
"incoming_EMP_data.dat",
"EMP.pemp", // word boundary can be beginning or end
"Hurz-EMP#poof", // many
"~EMP=", // many strange characters are boundaries
"XYZ_TEMP.dat",
"1EMP2", // numbers are considered word
"ßEMPö" // unicode characters are also considered word
};
Pattern pattern = Pattern.compile("\\bEMP\\b");
// word boundary EMP word boundary
// _ counts as part of a word though
for (String string : examples) {
if(pattern.matcher(string.replace("_", " ")).find()) {
System.out.println(string + " is EMP");
} else {
System.out.println(string + " is not.");
}
}
打印
incoming_EMP_data.dat is EMP
EMP.pemp is EMP
Hurz-EMP#poof is EMP
~EMP= is EMP
XYZ_TEMP.dat is not.
1EMP2 is not.
ßEMPö is not.
关于\b
的好处是,即使字边界是字符串的开头或结尾,它也会匹配。这是不容易解决的问题。遗憾的是,_
被视为单词的一部分,因此您必须替换它(如上所述)或扩展模式以将其包含为替代"(\\b|_)EMP(\\b|_)"
。