java 随机生成一个中文、判断某个string是否是中文以及打印出全部的中文

现在网上大多数用于判断中文字符的是 U+4E00..U+9FA5 这个范围是只是“中日韩统一表意文字”这个区间,但这不是全部,如果要全部包含,则还要他们的扩展集、部首、象形字、注间字母等等;

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();
	}
}

java 随机生成一个中文、判断某个string是否是中文以及打印出全部的中文,布布扣,bubuko.com

时间: 2024-12-17 07:41:44

java 随机生成一个中文、判断某个string是否是中文以及打印出全部的中文的相关文章

Java随机生成中文汉字(使用高位低位转码)

1 Java随机生成中文汉字 2 /** 3 * 原理是从汉字区位码找到汉字.在汉字区位码中分高位与底位, 且其中简体又有繁体.位数越前生成的汉字繁体的机率越大. 4 * 所以在本例中高位从171取,底位从161取, 去掉大部分的繁体和生僻字.但仍然会有!! 5 * 6 */ 7 @Test 8 public void create() throws Exception { 9 String str = null; 10 int hightPos, lowPos; // 定义高低位 11 Ran

随机生成一个数独

最近学习用Java编写GUI程序,感觉从做一个小东西入手最好,选择了编写一些小游戏开始,第一个为数独游戏. http://en.wikipedia.org/wiki/Sudoku 编写数独游戏第一步考虑的就是该如何生成一个原始的数独题目,要想生成数独题目最简单的办法就是先随机生成一个完整的数独,然后从中摘除一些数字,这样就可以生成一道数独题.所以需要考虑如何随机的生成一个完整的数独,这里考虑使用回溯法生成: 在数独的某个位置插入一个1~9的值 如果这个值能正常插入,则递归在下一个位置插入 如果这

转:在0~N(不包括N)范围内随机生成一个长度为M(M &lt;= N)且内容不重复的数组

1. 最朴素暴力的做法. void cal1() { int i = 0, j = 0, num = 0; int result[M]; result[0] = rand() % N; //第一个肯定不重复, 直接加进去 for (i = 1; i < M; i++) //获得剩下的(M-1)个随机数 { num = rand() % N; //生成0 ~ N之间的随机数字 for (j = 0; j < i; j++) { if (num == result[j]) //如果和result数

随机生成一个5位以内的数,然后输出该数共有多少位,每位分别是什么

//方法一: <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> /* * 函数名:randomFiveNumber * 参数:无 * 作业:随机生成一个5位以内的数,然后输出该数共有多少位,每位分别是什么 */ function ran

PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。

Python 练习 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的数,屏幕显示"太大了,请重新输入"如果小于预设的数,屏幕显示"太小了,请重新输入"如此循环,直到猜中,显示"恭喜你,猜中了!共猜了N次"N为用户猜测次数. 答案: import random def guess_number(): true_num = random.randint(1, 100) user_n

022给定一个字符串类型(string)表示的小数,打印出它的二进制表示(keep it up)

给定一个字符串类型(string)表示的小数,打印出它的二进制表示. 这个题注意字符串的合法性. 不过下面的代码没有处理那种无限循环的小数, 当出现无限循环小数时,while(other>0)可能永久为true 代码: #include <iostream> #include <string> std::string to_binary_string(const std::string& vNumStr) { std::string::size_type Pos =

Java 随机生成中文姓名,手机号,邮编,住址

package lovo; import java.util.HashMap; import java.util.Map; /** * 随机生成中文姓名,性别,Email,手机号,住址 * @author Quentin */ public class SuperRandom { public static String base = "abcdefghijklmnopqrstuvwxyz0123456789"; private static String firstName=&quo

java随机生成字符串并排序

1 package com.Imooc; 2 3 import java.util.ArrayList; 4 import java.util.Collections; 5 import java.util.List; 6 import java.util.Random; 7 8 /** 9 * 利用Collections.sort()方法对泛型为String的List进行排序 10 * 1. 创建List<String>之后往其中添加十条随机字符串 11 * 2. 每条字符串为10以内的随机

Java随机生成常用汉字验证码

原文:http://www.open-open.com/code/view/1422514803970 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import ja