C#での作業Stringクラスの非常に便利な2つの静的メソッドを見つけました。
javaで有効なサロゲートを見つけることができません。似たようなものはありますか?
実際、私はこのように2つの方法を翻訳しました:
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);
}
これは、Javaでこれらのメソッドを翻訳する最良の方法ですか?Javaでこれらの2つのメソッドを翻訳する最良の方法は何ですか?
String.trim を使用して空白の存在を確認したくない。文字列の両端をチェックし(反対側に空白以外が見つかった場合でも)、新しいStringオブジェクトを返すため、必要以上の処理を実行しています。だから私は空白のみをチェックするメソッドを実装したいと思います。
だから私の提案(自分で実装する場合)は次のようになります:
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;
}
または、String.trimの実装からヒントを得て、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;
}
最後に、各反復で文字列の両端をチェックして、内側にステップインすることを検討します。これにより、文字列の先頭または末尾に空白が存在するかどうかに関係なく、回答を得るために必要な反復回数が最小限になります。
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;
}
.netリフレクターまたは他の逆コンパイラーを介して、c#の実装を常に確認できます。
public static bool IsNullOrEmpty(string value)
{
if (value != null)
return value.Length == 0;
else
return true;
}
そして
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;
}
あなたはこのように試すことができます
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));
}
}
Apache commons langのStringUtils
クラスをご覧ください。
_com.google.common.base.Strings
_をインポートすると、Strings.isNullOrEmpty()
_isNullOrEmpty(@Nullable String string)
_
Apache Commons Langには、文字列用のさまざまな便利なユーティリティセットがあります。 http://commons.Apache.org/lang/api-release/org/Apache/commons/lang3/StringUtils.html
もちろん、依存関係を気にしたくない場合は、実装で十分です。
これははるかに単純で理解しやすいはずです。
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());
}
JDK11では、String
クラスにisBlank
メソッドがあります。
文字列が空であるか空白コードポイントのみが含まれている場合はtrueを返し、それ以外の場合はfalseを返します。
Nullかどうかはチェックしませんが、C#のstring.IsNullOrWhiteSpace
に近いはずです。
あなたは今やることができます:
var isNullOrWhiteSpace = str == null || str.isBlank();
またはヘルパーメソッドを作成します。
public static boolean isNullOrWhitespace(String s) { return s == null || str.isBlank(); }