[英]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.