文字列がnullでも空でもないことを確認するにはどうすればよいですか?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
文字列がnullでも空でもないことを確認するにはどうすればよいですか?
public void doStuff(String str)
{
if (str != null && str != "**here I want to check the 'str' is empty or not**")
{
/* handle empty string */
}
/* ... */
}
回答:
どの程度のisEmpty() ?
if(str != null && !str.isEmpty())
&&
の最初の部分が&&
失敗した場合、javaは2番目の部分の評価に進まず、したがってstr.isEmpty()
if str
がnull からnullポインタ例外を取得しないようにするため、この順序で必ずの部分を使用してください。
注意してください、それはJava SE 1.6以降でのみ利用可能です。str.length() == 0
以前のバージョンを確認する必要があります。
空白も無視するには:
if(str != null && !str.trim().isEmpty())
(Java 11 str.trim().isEmpty()
はstr.isBlank()
他のUnicode空白もテストするように縮小できるため)
便利な関数に包まれています:
public static boolean empty( final String s ) {
// Null-safe, short-circuit evaluation.
return s == null || s.trim().isEmpty();
}
になる:
if( !empty( str ) )
isEmpty()
Stringインスタンスを必要とするように見えることに注意してください(非静的)。null参照でこれを呼び出すと、NullPointerExceptionがスローされます。
TextUtils.isEmpty(String)
文字列が空かnullかを確認するために使用することをお勧めします。素敵で短い。TextUtilsクラスはAndroid SDKの一部です。
(str != null && str.length() > 0)
。
私はこれらの種類のもの、特にStringUtilsユーティリティクラスにApache commons-langを使用するのが好きです:
import org.apache.commons.lang.StringUtils;
if (StringUtils.isNotBlank(str)) {
...
}
if (StringUtils.isBlank(str)) {
...
}
isEmpty
またはのみを使用する場合isBlank
、サードパーティのライブラリを含めることはおそらく役に立たないでしょう。独自のユーティリティクラスを作成して、そのようなメソッドを提供できます。しかし、Bozhoが説明するように、このcommons-lang
プロジェクトは多くの便利な方法を提供します!
StringUtils.isNotBlank(str)
同様ヌル検査を行いません。
ここにAndroidを追加するだけです:
import android.text.TextUtils;
if (!TextUtils.isEmpty(str)) {
...
}
@BJornと@SeanPatrickFloydに追加するには、次のようにします。
Strings.nullToEmpty(str).isEmpty();
// or
Strings.isNullOrEmpty(str);
コモンズラングの方が読みやすい場合がありますが、ゆっくりとグアバに頼っています。さらに、コモンズラングは混乱することがあります isBlank()
(空白文字の有無など)。
Commons LangのGuavaのバージョンisBlank
は次のようになります。
Strings.nullToEmpty(str).trim().isEmpty()
許可しない""
(空の)AND null
疑わしくてバグの可能性があるコードは、おそらく許可しないすべてのケースを処理しないのでnull
(SQLの場合、SQL / HQLは奇妙なので理解できますが''
)。
str != null && str.length() != 0
あるいは
str != null && !str.equals("")
または
str != null && !"".equals(str)
注:2番目のチェック(1番目と2番目の選択肢)では、strがnullでないことを前提としています。最初のチェックがそれを実行している(そして、最初のチェックがfalseの場合、Javaは2番目のチェックを実行しない)だけで問題ありません!
重要:文字列の等価性のために==を使用しないでください。==ポインタが値ではなく等しいかどうかをチェックします。2つの文字列は異なるメモリアドレス(2つのインスタンス)に存在できますが、値は同じです!
私が知っているほとんどすべてのライブラリはStringUtils
、StringUtil
またはと呼ばれるユーティリティクラスを定義し、StringHelper
それらには通常、探しているメソッドが含まれています。
私の個人的な好みはあるのApache Commonsの/ラングで、のStringUtilsのクラス、あなたは両方の取得します
(1つ目は文字列がnullまたは空かどうかをチェックし、2つ目はnull、空、または空白のみかどうかをチェックします)
Spring、Wicket、およびその他の多くのライブラリには、同様のユーティリティクラスがあります。外部ライブラリを使用しない場合は、独自のプロジェクトにStringUtilsクラスを導入することができます。
更新:何年も経ちましたが、最近ではGuavaのStrings.isNullOrEmpty(string)
方法を使用することをお勧めします。
これは私にとってはうまくいきます:
import com.google.common.base.Strings;
if (!Strings.isNullOrEmpty(myString)) {
return myString;
}
指定された文字列がnullまたは空の文字列の場合、trueを返します。
nullToEmptyを使用して文字列参照を正規化することを検討してください。その場合は、このメソッドの代わりにString.isEmpty()を使用できます。また、String.toUpperCaseなどのメソッドのnullセーフな特別な形式も必要ありません。または、「反対方向」に正規化して空の文字列をnullに変換する場合は、emptyToNullを使用できます。
どうですか:
if(str!= null && str.length() != 0 )
&&
if str == nullの右側のコードは実行されないため、NullPointerExceptionが発生しません。(情報源:私が試したところ)
org.apache.commons.lang3.StringUtils.isNotBlank()
またはを使用してくださいorg.apache.commons.lang3.StringUtils.isNotEmpty
。これら2つの間の決定は、実際に確認したいことに基づいています。
isNotBlank()の入力パラメータであることをチェックします。
isNotEmpty()の入力パラメータであることだけをチェックします
入力に基づいてtrueまたはfalseを返します
Predicate<String> p = (s)-> ( s != null && !s.isEmpty());
p.test(string);
ライブラリ全体を含めたくない場合は、そこから必要なコードを含めるだけです。自分で保守する必要があります。しかし、これはかなり単純な関数です。ここではcommons.apache.orgからコピーされます
/**
* <p>Checks if a String is whitespace, empty ("") or null.</p>
*
* <pre>
* StringUtils.isBlank(null) = true
* StringUtils.isBlank("") = true
* StringUtils.isBlank(" ") = true
* StringUtils.isBlank("bob") = false
* StringUtils.isBlank(" bob ") = false
* </pre>
*
* @param str the String to check, may be null
* @return <code>true</code> if the String is null, empty or whitespace
* @since 2.0
*/
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}
少し手遅れですが、チェックの機能的なスタイルを次に示します。
Optional.ofNullable(str)
.filter(s -> !(s.trim().isEmpty()))
.ifPresent(result -> {
// your query setup goes here
});
新しい方法があります java-11: String#isBlank
文字列が空であるか空白コードポイントのみが含まれている場合はtrueを返し、それ以外の場合はfalseを返します。
jshell> "".isBlank()
$7 ==> true
jshell> " ".isBlank()
$8 ==> true
jshell> " ! ".isBlank()
$9 ==> false
これを組み合わせてOptional
、文字列がnullまたは空かどうかを確認できます
boolean isNullOrEmpty = Optional.ofNullable(str).map(String::isBlank).orElse(true);
テストは、同じ条件で空の文字列とnullと等しい:
if(!"".equals(str) && str != null) {
// do stuff.
}
argがfalseの場合はfalseを返すNullPointerException
ため、strがnullの場合はスローしません。Object.equals()
null
他の構成str.equals("")
は恐ろしいものを投げNullPointerException
ます。一部の人は、文字列リテラルを使用したオブジェクトをequals()
呼び出すときに不適切な形式を検討するかもしれませんが、それは機能します。
また、この回答を確認してください:https : //stackoverflow.com/a/531825/1532705
str != null
。!"".equals(str)
すでに仕事をしている
Seanizerが上で述べたように、Apache StringUtilsはこれに最適です。guavaを含める場合は、以下を実行する必要があります。
public List<Employee> findEmployees(String str, int dep) {
Preconditions.checkState(StringUtils.isNotBlank(str), "Invalid input, input is blank or null");
/** code here **/
}
また、結果セットの列をインデックスではなく名前で参照することをお勧めします。これにより、コードの保守がはるかに容易になります。
ifステートメントをで一杯にするのではなく、複数の文字列を一度にチェックする独自のユーティリティ関数を作成しましたif(str != null && !str.isEmpty && str2 != null && !str2.isEmpty)
。これは関数です:
public class StringUtils{
public static boolean areSet(String... strings)
{
for(String s : strings)
if(s == null || s.isEmpty)
return false;
return true;
}
}
だから私は単に書くことができます:
if(!StringUtils.areSet(firstName,lastName,address)
{
//do something
}
areSet(String... strings)
次に、アレイの作成せずに呼び出すことができる:if(!StringUtils.areSet(firstName, lastName, address))
Java 8を使用していて、より機能的なプログラミングアプローチが必要なFunction
場合は、コントロールを管理するを定義して、apply()
必要なときにいつでもコントロールを再利用できます。
練習に来て、あなたはFunction
として定義することができます
Function<String, Boolean> isNotEmpty = s -> s != null && !"".equals(s)
次に、apply()
メソッドを次のように呼び出すだけで使用できます。
String emptyString = "";
isNotEmpty.apply(emptyString); // this will return false
String notEmptyString = "StackOverflow";
isNotEmpty.apply(notEmptyString); // this will return true
必要にFunction
応じて、String
が空かどうかをチェックし、それをで否定するを定義できます!
。
この場合、は次のFunction
ようになります。
Function<String, Boolean> isEmpty = s -> s == null || "".equals(s)
次に、apply()
メソッドを次のように呼び出すだけで使用できます。
String emptyString = "";
!isEmpty.apply(emptyString); // this will return false
String notEmptyString = "StackOverflow";
!isEmpty.apply(notEmptyString); // this will return true
Javaの8オプションあなたが行うことができます。
public Boolean isStringCorrect(String str) {
return Optional.ofNullable(str)
.map(String::trim)
.map(string -> !str.isEmpty())
.orElse(false);
}
この式でString
は、スペースで構成されるsも処理します。
StringUtils.isEmpty()を使用できます。文字列がnullまたは空の場合はtrueになります。
String str1 = "";
String str2 = null;
if(StringUtils.isEmpty(str)){
System.out.println("str1 is null or empty");
}
if(StringUtils.isEmpty(str2)){
System.out.println("str2 is null or empty");
}
結果になります
str1がnullまたは空です
str2はnullまたは空です
isNotBlank
実際のニーズに応じて、グアバまたはアパッチコモンズに助言します。私のコード例のさまざまな動作を確認してください:
import com.google.common.base.Strings;
import org.apache.commons.lang.StringUtils;
/**
* Created by hu0983 on 2016.01.13..
*/
public class StringNotEmptyTesting {
public static void main(String[] args){
String a = " ";
String b = "";
String c=null;
System.out.println("Apache:");
if(!StringUtils.isNotBlank(a)){
System.out.println(" a is blank");
}
if(!StringUtils.isNotBlank(b)){
System.out.println(" b is blank");
}
if(!StringUtils.isNotBlank(c)){
System.out.println(" c is blank");
}
System.out.println("Google:");
if(Strings.isNullOrEmpty(Strings.emptyToNull(a))){
System.out.println(" a is NullOrEmpty");
}
if(Strings.isNullOrEmpty(b)){
System.out.println(" b is NullOrEmpty");
}
if(Strings.isNullOrEmpty(c)){
System.out.println(" c is NullOrEmpty");
}
}
}
結果:
Apache:
aは空白
bは空白
cは空白
Google:
bはNullOrEmpty
cはNullOrEmpty
完全を期すため:すでにSpringフレームワークを使用している場合、StringUtilsはメソッドを提供します
org.springframework.util.StringUtils.hasLength(String str)
文字列がnullでなく、長さがある場合はtrue
同様に方法
org.springframework.util.StringUtils.hasText(String str)
戻り値:文字列がnullではなく、長さが0より大きく、空白のみが含まれていない場合はtrue
単に、空白も無視するには:
if (str == null || str.trim().length() == 0) {
// str is empty
} else {
// str is not empty
}
Springフレームワークを使用している場合は、メソッドを使用できます。
org.springframework.util.StringUtils.isEmpty(@Nullable Object str);
このメソッドは、任意のオブジェクトを引数として受け入れ、それをnullおよび空の文字列と比較します。結果として、このメソッドは、null以外の非文字列オブジェクトに対してtrueを返すことはありません。
StringUtils
は、「主にフレームワーク内での使用を目的としています。より包括的な文字列ユーティリティスイートについては、ApacheのCommons Langを検討してください」と明記されていることに注意してください。
文字列でnullを処理するより良い方法は、
str!=null && !str.equalsIgnoreCase("null") && !str.isEmpty()
要するに、
str.length()>0 && !str.equalsIgnoreCase("null")
オブジェクトのすべての文字列属性が空であるかどうかを確認するには(JavaリフレクションAPIアプローチに従ってすべてのフィールド名に!= nullを使用する代わりに)
private String name1;
private String name2;
private String name3;
public boolean isEmpty() {
for (Field field : this.getClass().getDeclaredFields()) {
try {
field.setAccessible(true);
if (field.get(this) != null) {
return false;
}
} catch (Exception e) {
System.out.println("Exception occurred in processing");
}
}
return true;
}
このメソッドは、すべての文字列フィールド値が空白の場合はtrueを返し、文字列属性にいずれかの値が存在する場合はfalseを返します。
メソッドのパラメーターを検証する必要がある場合は、シンプルなメソッドに従ってください
public class StringUtils {
static boolean anyEmptyString(String ... strings) {
return Stream.of(strings).anyMatch(s -> s == null || s.isEmpty());
}
}
例:
public String concatenate(String firstName, String lastName) {
if(StringUtils.anyBlankString(firstName, lastName)) {
throw new IllegalArgumentException("Empty field found");
}
return firstName + " " + lastName;
}
PreparedStatement
文字列連結プリミティブでSQLクエリを構築する代わりに、などを使用する必要があります。あらゆる種類のインジェクションの脆弱性を回避し、はるかに読みやすくするなど