Javaを使用して、Java文字列または文字配列が単なる空白で構成されていないことを確認したいですか?
これは非常によく似た質問ですが、Javascriptである点が異なります。
文字列に空白だけでなく文字と空白が含まれているかどうかを確認するにはどうすればよいですか?
EDIT:英数字に関するビットを削除したので、より理にかなっています。
私が考えることができる最短のソリューション:
if (string.trim().length() > 0) ...
これは、(非)空白のみをチェックします。特定の文字クラスを確認する場合は、次のような正規表現で強力なmatch()
を使用する必要があります。
if (string.matches(".*\\w.*")) ...
...少なくとも1つの(ASCII)英数字をチェックします。
Apache Commons Langライブラリを使用します。あらゆる種類の文字列操作に役立つStringUtilsというクラスがあります。文字列がすべて空白ではないかどうかを確認するには、次を使用できます。
StringUtils.isBlank(<your string>)
リファレンスは次のとおりです。 StringUtils.isBlank
Carl Smotriczが言及したものよりわずかに短い:
!string.trim().isEmpty();
if(target.matches("\\S"))
// then string contains at least one non-whitespace character
「非空白文字」を意味するバックスラッシュcap-Sの使用に注意してください
私はこれが最も簡単な(そしておそらく最速の?)解決策だと思いました。
この回答では、「つまり、少なくとも1つの英数字がある」というサイドノートに重点を置いています。それに加えて、Stringがnull
の場合にNPEを傷つけないことを除いて、他の(以前の)ソリューションに追加しすぎません。
(1)sがfalse
の場合、または(2)sが空の場合、または(3)sがホワイトチャーのみを含む場合、null
が必要です。
public static boolean containsNonWhitespaceChar(String s) {
return !((s == null) || "".equals(s.trim()));
}
空白のみをチェックし、nullを気にしない場合は、org.Apache.commons.lang.StringUtils.isWhitespace(String str)を使用できます。
StringUtils.isWhitespace(String str);
(文字列に空白のみが含まれているかどうかを確認します。)
Null(空白を含む)も確認する場合は、
StringUtils.isBlank(String str);
Java 11を使用している場合、新しいisBlank
文字列メソッドが役立ちます。
!s.isBlank();
Java 8、9、または10を使用している場合、単純なストリームを作成して、文字列が空白だけではないことを確認できます。
!s.chars().allMatch(Character::isWhitespace));
Apache Commons Langなどのサードパーティライブラリを必要としないことに加えて、これらのソリューションには、trim
ベースのソリューションが示唆するような単なる' '
スペースだけでなく、空白文字を処理するという利点があります。他の多くの答えで。サポートされているすべての空白タイプの完全なリストについては、 Javadocs を参照できます。空の文字列も両方のケースでカバーされることに注意してください。
トリム方法はあなたに最適です。
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でチェックしたりできます。
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()
trim()および他の言及された正規表現は、すべてのタイプの空白に対して機能しません
すなわち:Unicode文字「LINE SEPARATOR」 http://www.fileformat.info/info/unicode/char/2028/index.htm
Java関数Character.isWhitespace()は、すべての状況をカバーします。
そのため、既に説明したソリューションStringUtils.isWhitespace(String)/またはStringUtils.isBlank(String)を使用する必要があります。
代替案:
boolean isWhiteSpaces( String s ) {
return s != null && s.matches("\\s+");
}
StringUtils.isEmptyOrWhitespaceOnly(<your string>)
以下をチェックします。-nullか-スペースのみか-空の文字列 ""か