簡體   English   中英

從 Java 中的 String 中刪除尾隨子字符串

[英]Remove trailing substring from String in Java

如果字符串以某個字符串結尾,我希望刪除它的一部分。

一個例子是采用這個字符串: "am.sunrise.ios@2x.png"

並刪除@2x.png ,使其看起來像: "am.sunrise.ios"

我將如何檢查字符串的末尾是否包含"@2x.png"並將其刪除?

您可以檢查lastIndexOf ,如果它存在於字符串中,請使用substring將其刪除:

String str = "am.sunrise.ios@2x.png";
String search = "@2x.png";

int index = str.lastIndexOf(search);
if (index > 0) {
    str = str.substring(0, index);
}

假設你有一個字符串初始化為String file = "am.sunrise.ios@2x.png"; .

if(file.endsWith("@2x.png"))
    file = file.substr(0, file.indexOf("@2x.png"));

endsWith(String)方法返回一個布爾值,確定字符串是否具有某個后綴。 根據這一點,您可以在第一個字符和您嘗試刪除的字符的索引之前用其自身的子字符串替換字符串。

public static void main(String [] args){

    String word = "am.sunrise.ios@2x.png";

    word = word.replace("@2x.png", "");

    System.out.println(word);
}

如果您想從@直到結束通常刪除字符串的全部內容,您可以使用

yourString = yourString.replaceAll("@.*","");

其中@.*是正則表達式(正則表達式),表示以@開頭並在其后有任何字符(由.表示)零次或多次(由*表示)的子字符串。

如果沒有@xxx部分,您的字符串將保持不變。


如果您只想更改此特定子字符串@2x.png (而不是像@3x.png那樣@3x.png ),同時確保將其放置在字符串的末尾,您可以使用

yourString = yourString.replaceAll("@2x\\.png$","");

在哪里

  • $代表字符串的結尾
  • \\\\. 代表. 文字(我們需要轉義它,因為就像前面顯示的那樣.是代表任何字符的元字符)

由於我試圖在類似樣式的項目的 ArrayList 上執行此操作,因此我最終使用了以下代碼:

    for (int image = 0; image < IBImages.size(); image++) {
        IBImages.set(image, IBImages.get(image).split("~")[0].split("@")[0].split(".png")[0]);
    }

如果我有一個帶有名稱的圖像列表

[am.sunrise.ios.png, am.sunrise.ios@2x.png, am.sunrise.ios@3x.png, am.sunrise.ios~ipad.png, am.sunrise.ios~ipad@2x.png]

這允許我將字符串分成兩部分。 例如,如果我在“~”上拆分,“am.sunrise.ios~ipad.png”將被拆分為“am.sunrise.ios”和“~ipad.png”。 我可以通過引用 [0] 來取回第一部分。 因此,我在一行代碼中得到了我正在尋找的東西。

請注意,圖像是“am.sunrise.ios~ipad.png”

你可以使用 String.split():

public static void main(String [] args){
  String word = "am.sunrise.ios@2x.png";
  String[] parts = word.split("@");
  if (parts.length == 2) {
    System.out.println("looks like user@host...");
    System.out.println("User: " + parts[0]);
    System.out.println("Host: " + parts[1]);
  }
}

然后你有一個字符串數組,其中第一個元素包含“@”之前的部分,第二個元素包含“@”之后的部分。

考慮到答案12以及他們各自的評論,我認為最好的組合是endsWith + lastIndexOf

因此,我將使用以下代碼(直到現在還沒有完全發布):

String str = "am.sunrise.ios@2x.png";
String search = "@2x.png";

if (str.endsWith(search)) {
  str = str.substring(0, str.lastIndexOf(search));
}
private static String removeSuffixIfExists(String key, String suffix) {
    return key.endswith(suffix)
        ? key.substring(0, key.length() - suffix.length())
        : key; 
    }
}

String suffix = "@2x.png";
String key = "am.sunrise.ios@2x.png";

String output = removeSuffixIfExists(key, suffix);

暫無
暫無

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

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