首页 > 代码库 > java 随机生成一个中文、判断某个string是否是中文以及打印出全部的中文
java 随机生成一个中文、判断某个string是否是中文以及打印出全部的中文
现在网上大多数用于判断中文字符的是 U+4E00..U+9FA5 这个范围是只是“中日韩统一表意文字”这个区间,但这不是全部,如果要全部包含,则还要他们的扩展集、部首、象形字、注间字母等等;
2E80-A4CF:
包含了中日朝部首补充、康熙部首、表意文字描述符、中日朝符号和标点、日文平假名、日文片假名、注音字母、谚文兼容字母、象形字注释标志、注音字母扩展、中日朝笔画、日文片假名语音扩展、带圈中日朝字母和月份、中日朝兼容、中日朝统一表意文字扩展A、易经六十四卦符号、中日韩统一表意文字、彝文音节、彝文字根
F900-FAFF:
中日朝兼容表意文字
FE30-FE4F:
中日朝兼容形式
2E80-A4CF:
包含了中日朝部首补充、康熙部首、表意文字描述符、中日朝符号和标点、日文平假名、日文片假名、注音字母、谚文兼容字母、象形字注释标志、注音字母扩展、中日朝笔画、日文片假名语音扩展、带圈中日朝字母和月份、中日朝兼容、中日朝统一表意文字扩展A、易经六十四卦符号、中日韩统一表意文字、彝文音节、彝文字根
F900-FAFF:
中日朝兼容表意文字
FE30-FE4F:
中日朝兼容形式
所以,一般用4E00-9FA5已经可以,如果要更广,则用2E80-A4CF || F900-FAFF || FE30-FE4F
package javaTest; import java.util.Random; public class Test { private static int chineseStart = Integer.parseInt(String.valueOf(0x4e00)); private static int chineseEnd = Integer.parseInt(String.valueOf(0x9FA5)); /** * unicode * 汉字区间:4E00-9FA5 * 注音符号:3100-312F * 注音符号(闽南语、客家语扩展):31A0-31BF */ private static String randomChinese(){ Random random = new Random(); int position = random.nextInt(chineseEnd-chineseStart)+chineseStart; System.out.println(position+"--"+chineseEnd); String code = Integer.toHexString(position); return decode("\\u"+code); } /** * @return 所有的中文 */ public String getAllChinese(){ StringBuilder sb = new StringBuilder(); for(int i=chineseStart;i<=chineseEnd;i++){ String ss = Integer.toHexString(i); sb.append(decode("\\u"+ss)); } return sb.toString() ; } /** * 判断是否为中文 * @return */ public static boolean isChinese(String string){ boolean flag = false; for (int i = 0; i < string.length(); i++) { char c = string.charAt(i); if ((c >= 0x4e00) && (c <= 0x9FA5)) { flag = true; } } return flag; } public static void main(String[] args) throws InterruptedException { System.out.println(randomChinese()); System.out.println(isChinese("哈")); } /** * 将unicode编码转成中文字符 * @param unicodeStr * @return */ public static String decode(String unicodeStr) { if (unicodeStr == null) { return null; } StringBuffer sb = new StringBuffer(); int maxLoop = unicodeStr.length(); for (int i = 0; i < maxLoop; i++) { if (unicodeStr.charAt(i) == '\\') { if ((i < maxLoop - 5) && ((unicodeStr.charAt(i + 1) == 'u') || ( unicodeStr.charAt(i + 1) == 'U'))) try { sb.append((char) Integer.parseInt(unicodeStr.substring(i + 2, i + 6), 16)); i += 5; } catch (NumberFormatException localNumberFormatException) { sb.append(unicodeStr.charAt(i)); } else sb.append(unicodeStr.charAt(i)); } else { sb.append(unicodeStr.charAt(i)); } } return sb.toString(); } }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。