

byte配列に格納されている値がすべて0以外なら真のif文を書きたいのですがスマートに書けません。  
以下が実装例ですがもっとスマートな判定方法は無いのでしょうか？  
よろしくおねがいします。

[code]

    byte[] b = {0x00, 0x00, 0x00, 0x00};
    
    if (b[0] != 0) {
        if(b[1] != 0) {
            if(b[2] != 0) {
                if(b[3] != 0) {
                /* 処理  */
                }
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2021-12-22T01:55:34.413
85265
2021-12-22T11:43:14.330
2021-12-22T09:21:15.343
3060
44244
question
java
byte配列をif文で綺麗に判定する方法

[code]

    if (b[0] != 0 && b[1] != 0 && b[2] != 0 && b[3] != 0)
    
[/code]

でいいのでは。


CC BY-SA 4.0
2021-12-22T02:02:05.983
85266
2021-12-22T11:43:14.330
2021-12-22T11:43:14.330
45045
45045
85265
answer


スマートかは解りませんが

[code]

    byte[] b = {0x00, 0x00, 0x00, 0x00};
    byte checker = b[0]|b[1]|b[2]|b[3];
    
    if (ckecker == 0x00) {
        // 全ビットが0の時の処理
    }
    
[/code]

などはいかがでしょうか？


CC BY-SA 4.0
2021-12-22T02:05:43.980
85267
2021-12-22T02:05:43.980
14745
85265
answer


`contains`系を使うとうまくいきそうですが、byteだとうまくいきませんね。

[code]

    byte[] b = {0x00, 0x00, 0x00, 0x00};
            
    boolean contains = Arrays.asList(b).contains(0x00);
    
    if(contains) {
      System.out.println("Hello");
    } else {
      System.out.println("World");
    }
    
[/code]


CC BY-SA 4.0
2021-12-22T02:37:20.863
85270
2021-12-22T02:37:20.863
40856
85265
answer


  * [How do I determine whether an array contains a particular value in Java?](https://stackoverflow.com/q/1128723/4506703)
  * [Java, Simplified check if int array contains int](https://stackoverflow.com/q/12020361/4506703)

に似た質問がありましたので、これらの回答が参考になるかと思います。

簡潔、という点ではライブラリを利用する方法が挙げられます。

[Google Guava](https://github.com/google/guava):

[code]

    // import com.google.common.primitives.Bytes;
    
    if (!Bytes.contains(b, (byte) 0)) {
        /* 処理 */
    }
    
[/code]

[Commons Lang](https://commons.apache.org/proper/commons-lang/):

[code]

    // import org.apache.commons.lang3.ArrayUtils;
    
    if(!ArrayUtils.contains(b, (byte) 0)) {
        /* 処理 */
    }
    
[/code]

いずれの実装も結局配列の要素を `for` ループで確認しているだけなので、自前での実装も(汎用性が不要なら特に)簡単です:

[code]

    // 使い方: if (!containsZero(b)) { /* 処理 */ }
    
    public static boolean containsZero(final byte[] array) {
        for (final byte b : array) {
            if (b == 0) {
                return true;
            }
        }
        return false;
    }
    
[/code]


CC BY-SA 4.0
2021-12-22T09:12:55.960
85279
2021-12-22T09:12:55.960
2808
85265
answer