'Remove trailing substring from String in Java
I am looking to remove parts of a string if it ends in a certain string.
An example would be to take this string: "[email protected]"
And remove the @2x.png so it looks like: "am.sunrise.ios"
How would I go about checking to see if the end of a string contains "@2x.png" and remove it?
Solution 1:[1]
You could check the lastIndexOf, and if it exists in the string, use substring to remove it:
String str = "[email protected]";
String search = "@2x.png";
int index = str.lastIndexOf(search);
if (index > 0) {
str = str.substring(0, index);
}
Solution 2:[2]
Assuming you have a string initialized as String file = "[email protected]";.
if(file.endsWith("@2x.png"))
file = file.substr(0, file.indexOf("@2x.png"));
The endsWith(String) method returns a boolean determining if the string has a certain suffix. Depending on that you can replace the string with a substring of itself between the first character and before the index of the character that you are trying to remove.
Solution 3:[3]
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 = "[email protected]";
String output = removeSuffixIfExists(key, suffix);
Solution 4:[4]
public static void main(String [] args){
String word = "[email protected]";
word = word.replace("@2x.png", "");
System.out.println(word);
}
Solution 5:[5]
If you want to generally remove entire content of string from @ till end you can use
yourString = yourString.replaceAll("@.*","");
where @.* is regex (regular expression) representing substring starting with @ and having any character after it (represented by .) zero or more times (represented by *).
In case there will be no @xxx part your string will be unchanged.
If you want to change only this particular substring @2x.png (and not substirng like @3x.png) while making sure that it is placed at end of your string you can use
yourString = yourString.replaceAll("@2x\\.png$","");
where
$represents end of string\\.represents.literal (we need to escape it since like shown earlier.is metacharacter representing any character)
Solution 6:[6]
Since I was trying to do this on an ArrayList of items similarly styled I ended up using the following code:
for (int image = 0; image < IBImages.size(); image++) {
IBImages.set(image, IBImages.get(image).split("~")[0].split("@")[0].split(".png")[0]);
}
If I have a list of images with the names
[am.sunrise.ios.png, [email protected], [email protected], am.sunrise.ios~ipad.png, [email protected]]
This allows me to split the string into 2 parts. For example, "am.sunrise.ios~ipad.png" will be split into "am.sunrise.ios" and "~ipad.png" if I split on "~". I can just get the first part back by referencing [0]. Therefore I get what I'm looking for in one line of code.
Note that image is "am.sunrise.ios~ipad.png"
Solution 7:[7]
You could use String.split():
public static void main(String [] args){
String word = "[email protected]";
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]);
}
}
Then you haven an array of Strings, where the first element contains the part before "@" and the second element the part after the "@".
Solution 8:[8]
Combining the answers 1 and 2:
String str = "[email protected]";
String search = "@2x.png";
if (str.endsWith(search)) {
str = str.substring(0, str.lastIndexOf(search));
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Mureinik |
| Solution 2 | |
| Solution 3 | Hannu Varjoranta |
| Solution 4 | Christopher Bell |
| Solution 5 | |
| Solution 6 | |
| Solution 7 | |
| Solution 8 |
