簡體   English   中英

Java刪除字符串的第一部分(不區分大小寫)

[英]Java delete first part of string (case-insensitive)

我進行搜索,但找不到正確的代碼,因為我只看到區分大小寫的代碼。

我正在編寫代碼,以檢查文件名以“ 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);
    }

如果我正確理解您的問題,請將其小寫並檢查

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

您的方法似乎過於復雜。 為什么不做這樣的事情:

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;
}

而且,您還可以包括一些錯誤檢查,以檢查名稱是否太短並導致超出范圍的異常。

我很喜歡Lars Nielsen解決方案,因為它很簡單,但是如果您想了解在這種情況下正則表達式的外觀,則為:

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

測試

正則表達式(?i)^cmf-.*工作方式如下:

  • (?i)啟用不區分大小寫的匹配(默認情況下,區分大小寫)。
  • ^cmf-表示我們希望在字符串的Cmf-包含cmf- (或Cmf-CMF- ,...)。
  • .* -...緊隨其后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM