我想删除字符串的某些部分,如果它以特定字符串结尾。
例如,将使用此字符串:"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.lastIndexOf
方法可以在字符串中找到子串,不仅仅是在结尾处。你应该使用 str.endsWith(suffix)
进行检查,然后内联调用 lastIndexOf
。 - jirassimokString file = "am.sunrise.ios@2x.png";
。if(file.endsWith("@2x.png"))
file = file.substring(0, file.lastIndexOf("@2x.png"));
endsWith(String)
方法返回一个布尔值,用于确定字符串是否有特定的后缀。根据此结果,您可以使用自身子字符串替换从第一个字符开始到要删除的字符索引之前结束的字符串。
lastIndexOf
更正确,因为我们只需要删除指定字符串的结尾部分。 indexOf
返回指定字符串的第一个匹配项,但在这种情况下,我们需要该指定字符串的最后一个匹配项。.endsWith("@2x.png")
确保了 lastIndexOf
具体指的是 @2x.png。@Pshemo - Sam Sprivate 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);
@
到结尾删除整个内容,您可以使用以下方法:yourString = yourString.replaceAll("@.*","");
其中@.*
是正则表达式(正则表达式),表示以@
开头并在其后具有任何字符(由.
表示)零次或多次(由*
表示)的子字符串。
如果没有@xxx
部分,您的字符串将保持不变。
@2x.png
(而不是像@3x.png
这样的子字符串),同时确保它位于字符串末尾,您可以使用。yourString = yourString.replaceAll("@2x\\.png$","");
什么是
$
代表字符串的结尾\\.
代表 .
的字面意思(我们需要转义它,因为像之前展示的一样,.
是一个元字符,表示任何字符)public static void main(String [] args){
String word = "am.sunrise.ios@2x.png";
word = word.replace("@2x.png", "");
System.out.println(word);
}
"@2x.png@2x.png"
,结果应该是"@2x.png"
而不是空字符串,因为这会影响提问者的目标。 - user3377716由于我试图在一个类似的样式的项目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]
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]);
}
}
然后你有一个字符串数组,其中第一个元素包含“@”之前的部分,第二个元素包含“@”之后的部分。
String
类中的substring
和endsWith
方法。 - Reimeus@2x.png
还是任何以@
开头直到结尾的子字符串? - Pshemo