Java删除字符串的第一部分(不区分大小写)

时间:2014-07-16 19:54:26

标签: java

我搜索并找不到合适的代码,因为我只看到区分大小写的代码。

我正在编写代码,检查文件名是否以“CMF-”开头。 我有代码,如果名称不是以CMF开头 - 那么就添加它(这是有效的)。

但是,我遇到了区分大小写的问题。第一个if语句是我需要帮助的地方。

例如,当某人将名称保存为cmf-something时,我需要删除cmf-并将CMF-放在其位置。 作为另一个例子,有人将文件保存为Cmf-它还需要删除Cmf-并将CMF-放在其位置。

    String name = document.getObjectName();

    String newName;

    String haystack = "CMF-";
    if(haystack.regionMatches(true, 0, name, 0, 4) && !name.startsWith(haystack))
    {
        //part to delete lowercase cmf and then add cmf
    }

    //Check the object name for CMF-
    if(!haystack.regionMatches(true, 0, name, 0, 4))
    {
        //System.out.println("Missing CMF- on name \nAdding CMF- to " + name);

        StringBuffer str = new StringBuffer("CMF-");
        newName = str.append(name).toString();

        document.setObjectName(newName);
    }

3 个答案:

答案 0 :(得分:2)

如果我理解你的问题是正确的,只需将其设为小写并检查

即可
if(newString.toLowerCase().starstWith("cmf")){
  newString = newString.substring(3);
}

答案 1 :(得分:2)

你的方法似乎过于复杂。为什么不这样做:

String name = document.getObjectName();
//Check for names starting "CMF-", "cmf-", "Cmf-", etc.
if (name.substring(0,4).equalsIgnoreCase("CMF-")){
    name = "CMF-"+name.substring(4); //May even overwrite correct name.
} else {
    name = "CMF-" + name;
}

并且您还可以包含一些错误检查,这些错误检查名称太短并导致越界异常。

答案 2 :(得分:1)

我喜欢Lars Nielsen solution因为它很简单,但是如果您想看看正则表达式在这种情况下的外观,那么它就是:

"Cmf-abc".matches("(?i)^cmf-.*"); // true

Test

正则表达式(?i)^cmf-.*的工作原理如下:

  • (?i)启用不区分大小写的匹配(默认情况下区分大小写)。
  • ^cmf-表示我们希望在字符串的开头显示cmf-(或Cmf-CMF-,...)...
  • .* - ......随之而来。