Comment puis-je couper les caractères de début ou de fin d'une chaîne en Java?
Par exemple, le caractère barre oblique "/" - je ne suis pas intéressé par les espaces et cherche à supprimer les caractères de début ou de fin à des moments différents.
Vous pourriez utiliser
De premier plan:
System.out.println("//test/me".replaceAll("^/+", ""));
Trailing:
System.out.println("//test/me//".replaceAll("/+$", ""));
Vous pouvez utiliser Apache StringUtils.stripStart pour supprimer les premiers caractères ou StringUtils.stripEnd pour supprimer les derniers caractères.
Par exemple:
System.out.println(StringUtils.stripStart("//test/me", "/"));
affichera:
teste moi
Notez que si, pour une raison quelconque, vous ne pouvez pas utiliser toute la bibliothèque StringUtils, vous pouvez simplement extraire les parties correspondantes, comme détaillé ici :
Vous pouvez utiliser une simple itération si vous souhaitez supprimer les caractères de début d'une chaîne:
String removeLeadingChar(String s, char c) {
int i;
for(i = 0; i < s.length() && s.charAt(i) == c; ++i);
return s.substring(i);
}
la même logique s’applique si vous souhaitez supprimer les char
de fin.
Si le temps d'exécution n'est pas un gros problème pour vous, alors ce code sera vraiment utile.
public class StringTrimmer {
public static String trim(String string, char ch){
return trim(string, ch, ch);
}
public static String trim(String string, char leadingChar, char trailingChar){
return string.replaceAll("^["+leadingChar+"]+|["+trailingChar+"]+$", "");
}
public static String trim(String string, String regex){
return trim(string, regex, regex);
}
public static String trim(String string, String leadingRegex, String trailingRegex){
return string.replaceAll("^("+leadingRegex+")+|("+trailingRegex+")+$", "");
}
// test
public static void main(String[] args) {
System.out.println(trim("110100", '1', '0')); // outputs: 01
System.out.println(trim("**Aa0*#**", '*')); // outputs: Aa0*#
System.out.println(trim("123##22222", "12", "22")); // outputs: 3##2
System.out.println(trim("101101##10101", "101")); // outputs: ##10
System.out.println(trim("123##abcde", "\\d", "[c-e]")); // outputs: ##ab
}
}
Pour ceux qui utilisent le printemps:
import org.springframework.util.StringUtils;
public void setFileName(String fileName) {
// If the extension does not exist trim the trailing period
this.fileName = StringUtils.trimTrailingCharacter(fileName,'.');
}
Ma version de rognage des caractères de début et de fin String s dans String str. Les deux arguments peuvent être nuls. Lorsque str n'a pas de début et/ou fin, il n'est pas changé.
String trim(String str, String s) {
String res = s == null ? str : str == null ? null : s.length() >= str.length() ? str : str.replaceFirst(s, "");
if ((res != null) && (s != null) && (res.length() >= s.length())) {
return res.substring(res.length() - s.length(), res.length()).equals(s) ? res.substring(0, res.length() - s.length()) : res;
}
return res;
}