Javaで文字列が「空」であるかどうかを正しく判断する方法


実は文字列の空欄の判断にとって難しい操作ではありませんて、甚だしきに至っては低い難易度で、ただ'<00'という文字に対してある人はまだよく知らないかもしれませんが、それはこのブログの重点です!
まず、印刷された効果がどのようなものかを見てみましょう.以下のようにします.
  • 印刷コード
  • public static void main(String[] args) {
        System.out.println("----\u0000----");
    }
    
  • 印刷結果
  • Connected to the target VM, address: '127.0.0.1:51581', transport: 'socket'
    ---- ---- 
    Disconnected from the target VM, address: '127.0.0.1:51581', transport: 'socket'
    Process finished with exit code 0
    

    上記の印刷結果から分かるように、表現形式から見れば確かに「スペース」であるが、nullでも「スペース文字(ハハハ、少し巻いている)でもないため、「スペース」を含む判空シーンをどのように処理すればよいのだろうか.
  • テストコード
  • public class StringUtils {
        public static boolean isNull(String str) {
            return str == null;
        }
    
        public static boolean isEmpty(String str) {
            return isNull(str) || "".equals(str);
        }
    
        public static boolean isBlank(String str) {
            if (isEmpty(str)) {
                return true;
            }
    
            int strLen = str.length();
            for (int i = 0; i < strLen; i++) {
                if (!Character.isWhitespace(str.charAt(i))) {
                    return false;
                }
            }
            return true;
        }
    
        public static boolean isAbsoluteBlank(String str) {
            if (isEmpty(str)) {
                return true;
            }
    
            int strLen = str.length();
            char c;
            for (int i = 0; i < strLen; i++) {
                if (!Character.isWhitespace(c = str.charAt(i)) && c != '\u0000') {
                    return false;
                }
            }
            return true;
        }
    
        public static void main(String[] args) {
            System.out.println("===================== test isNull =====================");
            System.out.println("null is " + isNull(null));
            System.out.println("\"\" is " + isNull(""));
            System.out.println("===================== test isEmpty =====================");
            System.out.println("null is " + isEmpty(null));
            System.out.println("\"\" is " + isEmpty(""));
            System.out.println("\" \" is " + isEmpty(" "));
            System.out.println("===================== test isBlank =====================");
            System.out.println("null is " + isBlank(null));
            System.out.println("\"\" is " + isBlank(""));
            System.out.println("\" \" is " + isBlank(" "));
            System.out.println("\\u0000 is " + isBlank("\u0000"));
            System.out.println("===================== test isAbsoluteBlank =====================");
            System.out.println("null is " + isAbsoluteBlank(null));
            System.out.println("\"\" is " + isAbsoluteBlank(""));
            System.out.println("\" \" is " + isAbsoluteBlank(" "));
            System.out.println("\\u0000 is " + isAbsoluteBlank("\u0000"));
        }
    }
    
  • 印刷結果
  • Connected to the target VM, address: '127.0.0.1:51742', transport: 'socket'
    ===================== test isNull =====================
    null is true
    "" is false
    ===================== test isEmpty =====================
    null is true
    "" is true
    " " is false
    ===================== test isBlank =====================
    null is true
    "" is true
    " " is true
    \u0000 is false
    ===================== test isAbsoluteBlank =====================
    null is true
    "" is true
    " " is true
    \u0000 is true
    Disconnected from the target VM, address: '127.0.0.1:51742', transport: 'socket'
    

    上記のコードからisAbsoluteBlankメソッドは'<00'文字を含む空のシーンを満たすことが分かった!
    そういえば、文字列の判定をisAbsoluteBlankメソッドのような論理に変更するのではないでしょうか.実はそうではありません.文字列の判定は私から見れば具体的なビジネスロジックをよく見る操作です.同じugcにとって、ニックネームはユーザーに「00」を使うことができます.そうすれば、appやホームページにニックネームがないような効果を示すことができますが、かっこいいのではないでしょうか.しかし、コメントに対しては、「<00’」の使用を許すべきではないと思います(実際には入力された「<00’文字のエスケープ処理も可能です)、実際にはユーザーが何もコメントしていないのと同じように、このようなコメントが発表に成功しても、何を見せるのでしょうか.
    はい、ここまで言うのはすべて1家の言叶で、みんなが何か异なっている见解があることを望んでコメントエリアで伝言を残して、试してみることができます