En travaillant dans c #, j'ai trouvé très utiles deux méthodes statiques de la classe String:
je ne trouve pas de substitut valide en Java. Existe-t-il quelque chose de similaire?
En fait, j'ai traduit les deux méthodes de cette manière:
public static boolean isNullOrEmpty(String a) {
return a == null || a.isEmpty();
}
public static boolean isNullOrWhiteSpace(String a) {
return a == null || (a.length() > 0 && a.trim().length() <= 0);
}
Est-ce la meilleure façon de traduire ces méthodes en Java? Quel est le meilleur moyen de traduire ces deux méthodes en Java?
Je préférerais ne pas utiliser String.trim pour vérifier l'existence d'espaces. Il fait plus de travail que nécessaire, car il vérifie les deux extrémités de la chaîne (même si aucun espace n'a été trouvé à l'autre extrémité) ET il renvoie un nouvel objet String. Donc, je préférerais implémenter une méthode pour vérifier les espaces uniquement.
Donc, ma suggestion (si vous vous implémentez vous-même) serait la suivante:
public static boolean isNullOrEmpty(String s) {
return s == null || s.length() == 0;
}
public static boolean isNullOrWhitespace(String s) {
return s == null || isWhitespace(s);
}
private static boolean isWhitespace(String s) {
int length = s.length();
if (length > 0) {
for (int i = 0; i < length; i++) {
if (!Character.isWhitespace(s.charAt(i))) {
return false;
}
}
return true;
}
return false;
}
Ou bien en prenant exemple sur l'implémentation de String.trim, vous pouvez utiliser la comparaison de caractères plutôt que Character.isWhitespace ():
// checking for whitespace like String.trim() does
private static boolean isWhitespace(String s) {
int length = s.length();
if (length > 0) {
for (int i = 0; i < length; i++) {
if (s.charAt(i) > ' ') {
return false;
}
}
return true;
}
return false;
}
Enfin, je considérerais de vérifier les deux extrémités de la chaîne à chaque itération, en passant à l’intérieur. Cela minimiserait le nombre d'itérations nécessaires pour obtenir la réponse, que l'espace soit au début ou à la fin de la chaîne.
private static boolean isWhitespace(String s) {
int length = s.length();
if (length > 0) {
for (int start = 0, middle = length / 2, end = length - 1; start <= middle; start++, end--) {
if (s.charAt(start) > ' ' || s.charAt(end) > ' ') {
return false;
}
}
return true;
}
return false;
}
Vous pouvez toujours voir l'implémentation de c # à travers le réflecteur .net ou un autre décompilateur:
public static bool IsNullOrEmpty(string value)
{
if (value != null)
return value.Length == 0;
else
return true;
}
et
public static bool IsNullOrWhiteSpace(string value)
{
if (value == null)
return true;
for (int index = 0; index < value.Length; ++index)
{
if (!char.IsWhiteSpace(value[index]))
return false;
}
return true;
}
tu peux essayer comme ça
import org.Apache.commons.lang.StringUtils;
public class CheckEmptyStringExample
{
public static void main(String[] args)
{
String string1 = "";
String string2 = "\t\r\n";
String string3 = " ";
String string4 = null;
String string5 = "Hi";
System.out.println("\nString one is empty? " + StringUtils.isBlank(string1));
System.out.println("String one is not empty? " + StringUtils.isNotBlank(string1));
System.out.println("\nString two is empty? " + StringUtils.isBlank(string2));
System.out.println("String two is not empty?" + StringUtils.isNotBlank(string2));
System.out.println("\nString three is empty?" + StringUtils.isBlank(string3));
System.out.println("String three is not empty?" + StringUtils.isNotBlank(string3));
System.out.println("\nString four is empty?" + StringUtils.isBlank(string4));
System.out.println("String four is not empty?" + StringUtils.isNotBlank(string4));
System.out.println("\nString five is empty?" + StringUtils.isBlank(string5));
System.out.println("String five is not empty?" + StringUtils.isNotBlank(string5));
}
}
Examinez la classe StringUtils
dans Apache commons lang.
Si vous importez com.google.common.base.Strings
, vous avez Strings.isNullOrEmpty()
isNullOrEmpty(@Nullable String string)
Apache Commons Lang possède un ensemble varié d’utilitaires pour les chaînes: http://commons.Apache.org/lang/api-release/org/Apache/commons/lang3/StringUtils.html
Bien sûr, votre implémentation peut suffire si vous ne voulez pas vous soucier des dépendances.
Cela devrait être beaucoup plus simple et facile à comprendre.
public static boolean isNullOrEmpty(String s) {
return s == null || s.length() == 0;
}
public static boolean isNullOrWhitespace(String s) {
return isNullOrEmpty(s) ? true : isNullOrEmpty(s.trim());
}
Dans JDK11 , la classe String
a une méthode isBlank
qui:
Renvoie true si la chaîne est vide ou ne contient que des espaces blancs codepoints, sinon faux.
Bien qu'il ne vérifie pas la nullité, il est certainement plus proche du string.IsNullOrWhiteSpace
de C #.
Vous pouvez maintenant faire:
var isNullOrWhiteSpace = str == null || str.isBlank();
ou créez une méthode d'assistance:
public static boolean isNullOrWhitespace(String s) { return s == null || str.isBlank(); }