web-dev-qa-db-ja.com

Java文字列がすべて空白ではないことを確認するにはどうすればよいですか?

Javaを使用して、Java文字列または文字配列が単なる空白で構成されていないことを確認したいですか?

これは非常によく似た質問ですが、Javascriptである点が異なります。
文字列に空白だけでなく文字と空白が含まれているかどうかを確認するにはどうすればよいですか?

EDIT:英数字に関するビットを削除したので、より理にかなっています。

123
Ankur

私が考えることができる最短のソリューション:

if (string.trim().length() > 0) ...

これは、(非)空白のみをチェックします。特定の文字クラスを確認する場合は、次のような正規表現で強​​力なmatch()を使用する必要があります。

if (string.matches(".*\\w.*")) ...

...少なくとも1つの(ASCII)英数字をチェックします。

212
Carl Smotricz

Apache Commons Langライブラリを使用します。あらゆる種類の文字列操作に役立つStringUtilsというクラスがあります。文字列がすべて空白ではないかどうかを確認するには、次を使用できます。

StringUtils.isBlank(<your string>)

リファレンスは次のとおりです。 StringUtils.isBlank

54
Chris J

Carl Smotriczが言及したものよりわずかに短い:

!string.trim().isEmpty();
45
redslime
19
darelf
if(target.matches("\\S")) 
    // then string contains at least one non-whitespace character

「非空白文字」を意味するバックスラッシュcap-Sの使用に注意してください

私はこれが最も簡単な(そしておそらく最速の?)解決策だと思いました。

5
Rob Raisch

この回答では、「つまり、少なくとも1つの英数字がある」というサイドノートに重点を置いています。それに加えて、Stringがnullの場合にNPEを傷つけないことを除いて、他の(以前の)ソリューションに追加しすぎません。

(1)sがfalseの場合、または(2)sが空の場合、または(3)sがホワイトチャーのみを含む場合、nullが必要です。

public static boolean containsNonWhitespaceChar(String s) {
  return !((s == null) || "".equals(s.trim()));
}
4
Andreas_D

空白のみをチェックし、nullを気にしない場合は、org.Apache.commons.lang.StringUtils.isWhitespace(String str)を使用できます。

StringUtils.isWhitespace(String str);

(文字列に空白のみが含まれているかどうかを確認します。)

Null(空白を含む)も確認する場合は、

StringUtils.isBlank(String str);
3
Arun

Java 11を使用している場合、新しいisBlank文字列メソッドが役立ちます。

!s.isBlank();

Java 8、9、または10を使用している場合、単純なストリームを作成して、文字列が空白だけではないことを確認できます。

!s.chars().allMatch(Character::isWhitespace));

Apache Commons Langなどのサードパーティライブラリを必要としないことに加えて、これらのソリューションには、trimベースのソリューションが示唆するような単なる' 'スペースだけでなく、空白文字を処理するという利点があります。他の多くの答えで。サポートされているすべての空白タイプの完全なリストについては、 Javadocs を参照できます。空の文字列も両方のケースでカバーされることに注意してください。

2
Pyves

トリム方法はあなたに最適です。

http://download.Oracle.com/docs/cd/E17476_01/javase/1.4.2/docs/api/Java/lang/String.html#trim()

文字列のコピーを返します。先頭と末尾の空白は省略されます。このStringオブジェクトが空の文字シーケンスを表す場合、またはこのStringオブジェクトで表される文字シーケンスの最初と最後の文字の両方に '\ u0020'(スペース文字)より大きいコードがある場合、このStringオブジェクトへの参照が返されます。

それ以外の場合、文字列に「\ u0020」より大きいコードを持つ文字がない場合、空の文字列を表す新しいStringオブジェクトが作成されて返されます。

そうでない場合、コードが '\ u0020'より大きい文字列の最初の文字のインデックスをkとし、コードが '\ u0020'より大きい文字列の最後の文字のインデックスをmとします。インデックスkの文字で始まり、インデックスmの文字で終わるこの文字列の部分文字列、つまりthis.substring(k、m + 1)の結果を表す新しい文字列オブジェクトが作成されます。

このメソッドは、文字列の先頭と末尾から空白を削除するために使用できます。実際、ASCII制御文字もすべてトリミングします。

戻り値:先頭および末尾の空白が削除されたこの文字列のコピー。先頭または末尾の空白がない場合はこの文字列。先頭または末尾の空白。

トリミングして空の文字列と比較したり、長さを0でチェックしたりできます。

1
Corey Ogburn

JDK/11では、String.isBlank APIを使用して、指定された文字列がすべて構成されていないかどうかを確認できます。

String str1 = "    ";
System.out.println(str1.isBlank()); // made up of all whitespaces, prints true

String str2 = "    a";
System.out.println(str2.isBlank()); // prints false

同じためのjavadocは次のとおりです。

/**
 * Returns {@code true} if the string is empty or contains only
 * {@link Character#isWhitespace(int) white space} codepoints,
 * otherwise {@code false}.
 *
 * @return {@code true} if the string is empty or contains only
 *         {@link Character#isWhitespace(int) white space} codepoints,
 *         otherwise {@code false}
 *
 * @since 11
 */
public boolean isBlank()
1
Naman

trim()および他の言及された正規表現は、すべてのタイプの空白に対して機能しません

すなわち:Unicode文字「LINE SEPARATOR」 http://www.fileformat.info/info/unicode/char/2028/index.htm

Java関数Character.isWhitespace()は、すべての状況をカバーします。

そのため、既に説明したソリューションStringUtils.isWhitespace(String)/またはStringUtils.isBlank(String)を使用する必要があります。

0
andreyro

代替案:

boolean isWhiteSpaces( String s ) {
    return s != null && s.matches("\\s+");
 }
0
OscarRyz
StringUtils.isEmptyOrWhitespaceOnly(<your string>)

以下をチェックします。-nullか-スペースのみか-空の文字列 ""か

https://www.programcreek.com/Java-api-examples/?class=com.mysql.jdbc.StringUtils&method=isEmptyOrWhitespaceOnly

0
akakargul