web-dev-qa-db-ja.com

文字列が空またはヌルであることを確認する最良の方法

isEmptyOrNullは非常に一般的ですが、人々はそれを異なる方法で実装しているため、これはさまざまな方法で以前に尋ねられたに違いありません。しかし、私はメモリとパフォーマンスの両方に適した最良の利用可能なアプローチの観点から以下の好奇心のクエリを持っています。

1)以下は、空のXMLタグの場合のようにすべてのスペースを考慮していません

return inputString==null || inputString.length()==0;

2)以下は注意しますが、トリムはパフォーマンスとメモリを消費する可能性があります

return inputString==null || inputString.trim().length()==0;

3)1つと2つを組み合わせると、パフォーマンスとメモリを節約できます(Chrisがコメントで示唆したように)

return inputString==null || inputString.trim().length()==0 || inputString.trim().length()==0;

4)パターンマッチャーに変換されます(文字列の長さがゼロでない場合にのみ呼び出されます)

private static final Pattern p = Pattern.compile("\\s+");

return inputString==null || inputString.length()==0 || p.matcher(inputString).matches();

5)-Apache Commons(StringUtils.isBlank/isEmpty)、Spring(StringUtils.isEmpty)、Guava(Strings.isNullOrEmpty)、またはその他のオプションのようなライブラリを使用しますか?

25
prash

Apache Commonsの便利な方法:

 org.Apache.commons.lang.StringUtils.isBlank(String str)

https://commons.Apache.org/proper/commons-lang/javadocs/api-2.6/org/Apache/commons/lang/StringUtils.html#isBlank(Java.lang.String)

24
puczo

文字列がnullまたは空かどうかを検出するには、プロジェクトに外部依存関係を含めずに、次のコードを使用して、コードをシンプル/クリーンに保ちます。

if(myString==null || myString.isEmpty()){
    //do something
}

または、空白も検出する必要がある場合:

if(myString==null || myString.trim().isEmpty()){
    //do something
}

これらは非常に一般的なチェックであるため、これらをユーティリティメソッドに簡単にラップしてより簡潔にすることができます。

public final class StringUtils{

    private StringUtils() { }   

    public static bool isNullOrEmpty(string s){
        if(s==null || s.isEmpty()){
            return true;
        }
        return false;
    }

    public static bool isNullOrWhiteSpace(string s){
        if(s==null || s.trim().isEmpty()){
            return true;
        }
        return false;
    }
}

次に、これらのメソッドを次の方法で呼び出します。

if(StringUtils.isNullOrEmpty(myString)){...}

そして

if(StringUtils.isNullOrWhiteSpace(myString)){...}

17
GregH

Null値を削除するJava 8のスタンスを表示するだけです。

String s = Optional.ofNullable(myString).orElse("");
if (s.trim().isEmpty()) {
    ...
}

Optional<String>を使用できる場合に意味があります。

15
Joop Eggen

Google Guavaからのこれは、同時に「null and empty String」をチェックアウトできます。

Strings.isNullOrEmpty("Your string.");

Mavenで依存関係を追加する

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>20.0</version>
</dependency>

gradleで

dependencies {
  compile 'com.google.guava:guava:20.0'
}
8
mavis.chen
Optional.ofNullable(label)
.map(String::trim)
.map(string -> !label.isEmpty)
.orElse(false)

OR

TextUtils.isNotBlank(label);

最後の解決策は、nullでないかどうかを確認し、同時にstrをトリミングします

2
haneenCo

Apache Commons Langには、引数が空またはnullの場合にtrueを返すStringUtils.isEmpty(String str)メソッドがあります

2

ほとんどの場合、Apache commonsライブラリのStringUtils.isBlank(str)で解決できます。ただし、チェック対象の入力文字列が引用符内にnull値を持つケースがある場合、そのようなケースのチェックに失敗します。

String.valueOf(obj) AP​​Iを使用して文字列に変換された入力オブジェクトがある例を取り上げます。 obj参照がnullの場合、String.valueOfはnullの代わりに「null」を返します。

StringUtils.isBlank("null")を使用しようとすると、APIがひどく失敗します。検証が適切であることを確認するために、そのようなユースケースもチェックする必要があります。

1

完全にネイティブなソリューションを見たことがないので、ここに1つあります:

return str == null || str.chars().allMatch(Character::isWhitespace);

基本的に、ネイティブのCharacter.isWhitespace()関数を使用します。そこから、重要度に応じてさまざまなレベルの最適化を実現できます(ユースケースの99.99999%で、さらに最適化する必要はありません)。

return str == null || str.length() == 0 || str.chars().allMatch(Character::isWhitespace);

または、本当に最適であるために(しかしheckaがい):

int len;
if (str == null || (len = str.length()) == 0) return true;
for (int i = 0; i < len; i++) {
  if (!Character.isWhitespace(str.charAt(i))) return false;
}
return true;

私がしたいことの1つ:

Optional<String> notBlank(String s) {
  return s == null || s.chars().allMatch(Character::isWhitepace))
    ? Optional.empty()
    : Optional.of(s);
}

...

notBlank(myStr).orElse("some default")
0
gzak

簡単かつ明確に:

if (str == null || str.trim().length() == 0) {
    // str is empty
}
0
simhumileco

同じ検証で複数の文字列をテストする必要がある場合、次のようなことができます。

import Java.util.Optional;
import Java.util.function.Predicate;
import Java.util.stream.Stream;

public class StringHelper {

  public static Boolean hasBlank(String ... strings) {

    Predicate<String> isBlank = s -> s == null || s.trim().isEmpty();

    return Optional
      .ofNullable(strings)
      .map(Stream::of)
      .map(stream -> stream.anyMatch(isBlank))
      .orElse(false);
  }

}

したがって、StringHelper.hasBlank("Hello", null, "", " ")またはStringHelper.hasBlank("Hello")のように汎用形式でこれを使用できます。

0
rsa

OptionalおよびApache commons Stringutilsライブラリを使用できます。

Optional.ofNullable(StringUtils.noEmpty(string1)).orElse(string2);

ここでは、string1がnullでも空でもないかどうかを確認します。そうでない場合はstring2を返します

0
Deepak Pandey

springframework library指定された文字列が空かどうかを確認します。

f(StringUtils.isEmpty("")) {
    //.... String is blank or null
}
0
gifpif