如何在字符串中搜索特定单词

时间:2014-11-12 23:05:32

标签: java

请看下面的代码,基本上我正在检查文件名中的一些特定单词以确定文件的类型。请参阅下面的内容 代码,并告诉我,如果这是最好的方式,否则请建议。

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

2 个答案:

答案 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|_)"