如何获取 Java/Clojure 中所有字母的集合?

2022-09-04 23:55:19

在Python中,我可以这样做:

>>> import string
>>> string.letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

有没有办法在Clojure中做类似的事情(除了在某个地方复制和粘贴上述字符)?我查看了Clojure标准库和java标准库,但找不到它。


答案 1

如果你只想要 Ascii 字符,

(map char (concat (range 65 91) (range 97 123)))

将产生,

(\A \B \C \D \E \F \G \H \I \J \K \L \M \N \O \P \Q \R \S \T \U \V \W \X \Y \Z 
 \a \b \c \d \e \f \g \h \i \j \k \l \m \n \o \p \q \r \s \t \u \v \w \x \y \z)

答案 2

一个正确的非 ASCII 中心实现:

private static String allLetters(String charsetName)
{
    CharsetEncoder ce = Charset.forName(charsetName).newEncoder();
    StringBuilder result = new StringBuilder();
    for(char c=0; c<Character.MAX_VALUE; c++)
    {
        if(ce.canEncode(c) && Character.isLetter(c))
        {
            result.append(c);
        }
    }
    return result.toString();
}

用“US-ASCII”调用它,你会得到所需的结果(除了大写字母排在第一位)。你可以用 来称呼它,但我怀疑你得到的远远超过大多数系统上的ASCII字母,即使在美国也是如此。Charset.defaultCharset()

注意:仅考虑基本的多语言平面。扩展到辅助飞机不会太难,但需要更长的时间,并且效用值得怀疑。