如何获得所选语言环境的所有国家字符?

问题描述 投票:0回答:1

在我的应用中,我需要根据所有可用的国家字符生成密码,例如:

private String generatePassword(String charSet, int passwordLength) {
    char[] symbols=charSet.toCharArray();
    StringBuilder sbPassword=new StringBuilder();
    Random wheel = new Random();

    for (int i = 0; i < passwordLength; i++) {
       int random = wheel.nextInt(symbols.length);
       sbPassword.append(symbols[random]);
    }
    return sbPassword.toString();
}

对于拉丁语,我们有类似的东西:

charSet="AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";

如何获得包含所有国家字符(字母)的相似String,例如泰语,阿拉伯语或希伯来语?

我的意思是,我们所知道的是Unicode包含任何语言环境都可用的所有国家字符,因此必须有一种获取它们的方法,否则我将不得不对国家字母进行硬编码-这很丑...(在我的如果我的应用支持10个以上的语言环境)

java internationalization locale alphanumeric
1个回答
0
投票

由于您正在使用char[],因此您将无法在所有脚本中表示所有Unicode代码点,因为其中一些将位于基本多语言平面之外,并且无法容纳在单个char中。不幸的是,没有一种简单的方法来获取脚本的所有代码点而不循环浏览它们,就像这样:

char[] charsForScript(Character.UnicodeScript script) {) {
  StringBuilder sb = new StringBuilder();
  for (int cp = 0; cp < Character.MAX_VALUE; ++cp) {
    if (Character.isValidCodePoint(cp) && script == Character.UnicodeScript.of(cp)) {
      sb.appendCodePoint(cp);
    }
  }
  return sb.toString().toCharArray();
}

这将返回给定脚本(例如,拉丁语,希腊语等)的所有字符”>

要获得所有代码点,即使在BMP之外,也可以使用:

int[] charsForScript(Character.UnicodeScript script) {) {
  List<Integer> ints = new ArrayList<>();
  for (int cp = 0; cp < Character.MAX_CODE_POINT; ++cp) {
    if (Character.isValidCodePoint(cp) && script == Character.UnicodeScript.of(cp)) {
      ints.add(cp);
    }
  }
  return ints.stream().mapToInt(i -> i).toArray();
}
© www.soinside.com 2019 - 2024. All rights reserved.