it-swarm.com.de

Java-Äquivalent von c # String.IsNullOrEmpty () und String.IsNullOrWhiteSpace ()

Ich habe in c # zwei sehr nützliche statische Methoden der String-Klasse gefunden: 

ich kann in Java keinen gültigen Ersatz finden. Gibt es etwas Ähnliches? 

Eigentlich habe ich die beiden Methoden auf diese Weise übersetzt: 

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);
}

Ist dies der beste Weg, um diese Methoden in Java zu übersetzen? Was ist der beste Weg, um diese beiden Methoden in Java zu übersetzen?

33
aleroot

Ich würde es vorziehen, String.trim nicht zu verwenden, um das Vorhandensein von Leerzeichen zu überprüfen. Es erledigt mehr Arbeit, als Sie benötigen, da es beide Enden der Zeichenfolge überprüft (auch wenn am anderen Ende kein Leerzeichen gefunden wurde) UND ein neues String-Objekt zurückgibt. Daher würde ich es vorziehen, eine Methode zu implementieren, um nur nach Leerzeichen zu suchen.

Mein Vorschlag (wenn Sie sich selbst implementieren) wäre also wie folgt:

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;
}

Oder nehmen Sie einen Hinweis aus der Implementierung von String.trim, könnten Sie den Zeichenvergleich statt Character.isWhitespace () verwenden:

// 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;
}

Schließlich würde ich in Betracht ziehen, beide Enden der Zeichenfolge in jeder Iteration zu überprüfen und nach innen zu gehen. Dies würde die Anzahl der erforderlichen Iterationen minimieren, unabhängig davon, ob am Anfang oder am Ende der Zeichenfolge Leerzeichen vorhanden sind.

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;
}
21
sudocode

Sie können die Implementierung von c # immer durch den .net-Reflektor oder einen anderen Decompiler sehen:

public static bool IsNullOrEmpty(string value)
{
  if (value != null)
    return value.Length == 0;
  else
    return true;
}

und

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;
}
12
Marcin Deptuła

sie können es so versuchen

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)); 
  }
}
9
Enigma State

Schauen Sie sich die Klasse StringUtils in Apache commons lang an.

6
Qwerky

Wenn Sie com.google.common.base.Strings importieren, haben Sie Strings.isNullOrEmpty()

isNullOrEmpty(@Nullable String string)
4
C oneil

Apache.commons.lang.StringUtils ist die Antwort.

ist leer()

ist leer()

1
Bhushan

Apache Commons Lang bietet verschiedene nützliche Hilfsprogramme für Strings: http://commons.Apache.org/lang/api-release/org/Apache/commons/lang3/StringUtils.html

Natürlich kann Ihre Implementierung ausreichen, wenn Sie sich nicht mit Abhängigkeiten beschäftigen möchten.

1
Viruzzo

Dies sollte viel einfacher und verständlicher sein.

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());
}
0
Dragon Warrior

In JDK11 hat die String-Klasse eine isBlank-Methode, die:

Gibt "true" zurück, wenn die Zeichenfolge leer ist oder nur Leerzeichen enthält Codepunkte, sonst falsch.

Obwohl es nicht auf Nichtigkeit überprüft wird, ist es sicherlich näher an C # 's string.IsNullOrWhiteSpace

Sie könnten jetzt tun:

var isNullOrWhiteSpace = str == null || str.isBlank();

oder erstellen Sie eine Hilfsmethode:

public static boolean isNullOrWhitespace(String s) { return s == null || str.isBlank(); }
0
Aomine