Clojure:生成所有键盘类型字符

时间:2012-05-23 02:18:54

标签: clojure

上下文

我想生成可以通过以下方式生成的所有字符:

  • 打开记事本
  • 按键盘上的一个键
  • 按住shift +按键盘上的一个键

我现在有什么:

(concat (range (int \a) (int \z))
  (range (int \A) (int \Z))
  (range (int \0) (int \9)))

然后手动添加更多字符,例如〜!@#$%^& *()_ + {} |:“<>?,。/;'[] \

问题

有更优雅的方式吗?

编辑

是的,我指的是美国Qwerty键盘。

2 个答案:

答案 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))