web-dev-qa-db-ja.com

StringBuilderでnullをチェックする方法は?

特にコード内でnullまたは空を確認したい。 JavaのStringBuilderの空とnullは同じですか?

例えば:

StringBuilder state = new StringBuilder();
StringBuilder err= new StringBuilder(); 
success = executeCommand(cmd, state, err); 

/* here executeCommand() returns empty or null in state, I cant  make changes in  <br/> executeCommand() so can I check it in my code somehow for state, if its null or empty? */<br/>

if (state == null) { //do blabla1 }
if (state.tostring().equals("")) { //do blabla2 }

上記のコードは意味がありますか、それをどのように変更する必要がありますか?

17
user1145280

いいえ、nullではemptyStringBuilderは異なります。

StringBuilder nullBuilder = null;
if(nullBuilder == null) {
    System.out.println("Builder is null");
}

StringBuilder emptyBuilder = new StringBuilder("");
if(emptyBuilder == null || emptyBuilder.toString().equals("")) {
    System.out.println("Builder is empty");
}
31
Kick

Javaでは、null参照リテラルです。変数がnullの場合、何も参照していません。

したがって、_StringBuilder s = null_がある場合、sStringBuilder型ですが、StringBuilderインスタンスを参照していません。

null以外の参照がある場合は、参照オブジェクトでmethodsを自由に呼び出すことができます。 StringBuilderクラスでは、そのようなメソッドの1つがlength()です。実際、null参照を使用してlength()を呼び出す場合、JavaランタイムはNullPointerExceptionをスローします。

したがって、このコードは非常に一般的です。

_If (s == null || s.length() == 0/*empty if the length is zero*/){
    // do something
_

_||_の評価は左から右に行われ、最初のtrue条件に達すると停止するという事実に依存しています。

9
Bathsheba

ヌルという意味は、その参照変数のヒープにオブジェクトがありません。これは、すべてのJavaオブジェクト、StringBuilderに固有ではなく、空の手段、_""_に共通です。

コードでは、StringBuilderオブジェクトを作成しているため、nullのチェックは冗長です。また、Java String apiでisEmpty()メソッドを使用して空をチェックできます。

_if(state.tostring().isEmpty()) {
//
}
_

そして、nullのチェックは正しいです。修正版はこちらでご覧ください

_if (state == null) {
// ...bla 1
} else if (state.tostring().isEmpty()) {
//... bla 2
}
_

ifがnullの場合、2番目のNullPointerException条件はstateをスローします。したがって、ifは_if else_でネストする必要があります

4

以下のコードが役立ちます。

StringBuffer sb = new StringBuffer();
String str = sb.toString();
if(!"".equals(str)) {
    System.out.println("String : " + str);
} else {
    System.out.println("Empty Builder");
}
0
Srinivasan.S

あなたはこのように試すことができます

StringBuilder state = new StringBuilder();
if(StringUtils.isNotBlank(state .toString())){   
//this will check for null, " ", ""
}
0