我想生成可以通过以下方式生成的所有字符:
(concat (range (int \a) (int \z))
(range (int \A) (int \Z))
(range (int \0) (int \9)))
然后手动添加更多字符,例如〜!@#$%^& *()_ + {} |:“<>?,。/;'[] \
有更优雅的方式吗?
是的,我指的是美国Qwerty键盘。
答案 0 :(得分:3)
如果你看US ASCII chart,似乎你想要的所有字符都在(range 33 127)
之内。因此,获取所有这些字符序列的最简单方法是将该范围转换为字符。
(map char (range 33 127))
但是,如果您尝试验证字符串是否只包含这些字符,请使用如下函数:
(defn valid-char? [c]
(let [i (int c)]
(and (> i 32) (< i 127))))
然后,您可以将其与every?
一起使用来验证字符串:
user=> (every? valid-char? "hello world")
true
user=> (every? valid-char? "héllo world")
false
答案 1 :(得分:1)
使用以下地图表格将生成您想要的字符。
(map #(str (char %)) (range 32 127))