从不带破折号的字符串创建UUID

如何从不带破折号的字符串中创建java.util.UUID

"5231b533ba17478798a3f2df37de2aD7" => #uuid "5231b533-ba17-4787-98a3-f2df37de2aD7"

回答:

Clojure的带#uuid 标签文字是对的传递java.util.UUID/fromString。并且,fromString将其除以“-”并将其转换为两个Long值。(UUID的格式已标准化为8-4-4-4-12十六进制数字,但“-”实际上仅用于验证和视觉识别。)

直接的解决方案是重新插入“-”并使用java.util.UUID/fromString

(defn uuid-from-string [data]

(java.util.UUID/fromString

(clojure.string/replace data

#"(\w{8})(\w{4})(\w{4})(\w{4})(\w{12})"

"$1-$2-$3-$4-$5")))

如果您想要没有正则表达式的内容,则可以使用ByteBufferDatatypeConverter

(defn uuid-from-string [data]

(let [buffer (java.nio.ByteBuffer/wrap

(javax.xml.bind.DatatypeConverter/parseHexBinary data))]

(java.util.UUID. (.getLong buffer) (.getLong buffer))))

以上是 从不带破折号的字符串创建UUID 的全部内容, 来源链接: utcz.com/qa/405430.html

回到顶部