clojure 字符串空检查失败 string/blank
clojure string null check failed with string/blank
(defn get-coll-id [^String coll_id]
(log/info "coll_id: " coll_id)
(if (string/blank? coll_id)
(let [collVal (get-coll-val)]
(log/info "collVal: " collSeqVal)
(format "C%011.0f" collVal))
coll_id))
日志显示“coll_id: null”。但是,string/blank 没有检测到 null,因此跳过了 collVal 的日志。检查空字符串的方法是什么?
某些东西(也许是数据库?)为您提供 coll_id
的字符串 "null"
,或者 (log/info ...)
将 Clojure nil
转换为字符串 "null"
.
考虑这段代码:
(ns tst.demo.core
(:use tupelo.core tupelo.test)
(:require
[clojure.string :as str]
))
(defn get-coll-id [^String coll_id]
(println "coll_id: " coll_id)
(if (str/blank? coll_id)
(println :blank)
coll_id))
(dotest
(newline)
(println :v1)
(spyx (get-coll-id nil))
(newline)
(println :v2)
(spyx (get-coll-id (pr-str nil)))
)
输出:
:v1
coll_id: nil
:blank
(get-coll-id nil) => nil
:v2
coll_id: nil
(get-coll-id (pr-str nil)) => "nil"
无论您做什么,您都会打印值 nil
或字符串 "nil"
。
由于我有一段时间没有使用Java,我试图强制它生成字符串"null"
,但是调用o.toString()
得到一个null
值创建一个
NullPointerException
,所以这不是答案。
更新
正如 amalloy 指出的那样,String.valueOf()
会将 Java null
转换为字符串 "null"
:
package demo;
public class Demo {
public static String go() {
Object o = null;
return String.valueOf( o );
}
}
当 运行:
(newline)
(spyx :v3 (demo.Demo/go))
结果
:v3 (demo.Demo/go) => "null"
关于你原来的问题,可以使用nil?
函数:
(defn blank-or-nil?
[s]
(or (nil? s)
(str/blank? s)))
(defn get-coll-id [^String coll_id]
(println "coll_id: " coll_id)
(if (blank-or-nil? coll_id)
(println "found blank-or-nil coll_id")
coll_id))
然后在传递 nil 值时打印 found blank-or-nil coll_id
。但是,如果您传递的是字符串 "null"
或字符串 "nil"
.
,这可能会使事情变得混乱
您需要弄清楚输入的是哪个值,然后追查来源。
以上代码是根据我的喜好template project.
(defn get-coll-id [^String coll_id]
(log/info "coll_id: " coll_id)
(if (string/blank? coll_id)
(let [collVal (get-coll-val)]
(log/info "collVal: " collSeqVal)
(format "C%011.0f" collVal))
coll_id))
日志显示“coll_id: null”。但是,string/blank 没有检测到 null,因此跳过了 collVal 的日志。检查空字符串的方法是什么?
某些东西(也许是数据库?)为您提供 coll_id
的字符串 "null"
,或者 (log/info ...)
将 Clojure nil
转换为字符串 "null"
.
考虑这段代码:
(ns tst.demo.core
(:use tupelo.core tupelo.test)
(:require
[clojure.string :as str]
))
(defn get-coll-id [^String coll_id]
(println "coll_id: " coll_id)
(if (str/blank? coll_id)
(println :blank)
coll_id))
(dotest
(newline)
(println :v1)
(spyx (get-coll-id nil))
(newline)
(println :v2)
(spyx (get-coll-id (pr-str nil)))
)
输出:
:v1
coll_id: nil
:blank
(get-coll-id nil) => nil
:v2
coll_id: nil
(get-coll-id (pr-str nil)) => "nil"
无论您做什么,您都会打印值 nil
或字符串 "nil"
。
由于我有一段时间没有使用Java,我试图强制它生成字符串"null"
,但是调用o.toString()
得到一个null
值创建一个
NullPointerException
,所以这不是答案。
更新
正如 amalloy 指出的那样,String.valueOf()
会将 Java null
转换为字符串 "null"
:
package demo;
public class Demo {
public static String go() {
Object o = null;
return String.valueOf( o );
}
}
当 运行:
(newline)
(spyx :v3 (demo.Demo/go))
结果
:v3 (demo.Demo/go) => "null"
关于你原来的问题,可以使用nil?
函数:
(defn blank-or-nil?
[s]
(or (nil? s)
(str/blank? s)))
(defn get-coll-id [^String coll_id]
(println "coll_id: " coll_id)
(if (blank-or-nil? coll_id)
(println "found blank-or-nil coll_id")
coll_id))
然后在传递 nil 值时打印 found blank-or-nil coll_id
。但是,如果您传递的是字符串 "null"
或字符串 "nil"
.
您需要弄清楚输入的是哪个值,然后追查来源。
以上代码是根据我的喜好template project.