`
linliangyi2007
  • 浏览: 1015131 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Graceful Java Programming 优雅Java编程 之 常用汉字一二级字库识别

阅读更多
把自己做的工具类留个档,同时分享给大家
import java.io.UnsupportedEncodingException;

/**
 * 国标汉字检查工具类
 * @author 林良益
 *
 */
public class GBHZUtil {
	//可忽略的分隔符号
	private static final String skipChar = "[\\s\\t\\r\\n]";
	
	private static final String NOGB2312CHAR = "不是GB2312字符";
	private static final String GB2312CHAR_NOHZ = "GB2312非汉字字符";
	private static final String GB2312CHAR_HZ = "GB2312汉字字符";
	
	
	
	/**
	 * 检查字符窜是否是国标字库一二级标准字库汉字
	 * 如果含有国标一二级字库外的汉字则返回false
	 * @param orgString
	 * @return
	 * @throws UnsupportedEncodingException
	 * 抛出改异常说明当前的java虚拟机运行环境不支持GB2312编码
	 */
	public static boolean validateGB2312HZ(String orgString) throws UnsupportedEncodingException{
		//忽略字符中的不可见分隔符
		String noSkipCharStr = orgString.replaceAll(skipChar, "");
		if("".equals(noSkipCharStr)){
			return false;
		}
		char[] charArray = noSkipCharStr.toCharArray();
		String identifyResult = null;
		for(char c : charArray){
			identifyResult = identifyGB2312Char(c);
			if(!GB2312CHAR_HZ.equals(identifyResult)){
				return false;
			}
		}		
		return true;
	}
	
	/**
	 * 识别GB2312字符
	 * @param theChar
	 * @return
	 * @throws UnsupportedEncodingException
	 * 抛出改异常说明当前的java虚拟机运行环境不支持GB2312编码
	 */
	public static String identifyGB2312Char(char theChar)throws UnsupportedEncodingException{		
		//将字符窜转成GB2312编码
		byte[] byteArray = String.valueOf(theChar).getBytes("GB2312");
		//根据国标区位码编码规则,判断字符
		int highBit = 0;
		for(int i = 0 ; i < byteArray.length ; i++){
			int offset = (byteArray[i] &  0xFF) -  0xA0;
			//GB2312字符区码在1-94	
			if(offset >= 1 && offset <= 94){
				if(highBit == 0){				
					//找到一个汉字区码
					highBit = offset;
				}else{
					//找到一个GB2312位码
					if(highBit < 16 || highBit > 87){
						return GB2312CHAR_NOHZ;
					}else{
						//位码在1-94区间 (其中对于第55 区的位码,最大为89
						if(highBit == 55 && offset > 89){
							return GB2312CHAR_NOHZ;
						}else{
							return GB2312CHAR_HZ;
						}
					}
				}				
			}else{
				//不是一个GB2312字符
				return NOGB2312CHAR;
			}
		}
		return NOGB2312CHAR;		
	}
}

分享到:
评论

相关推荐

    Go-graceful优雅的重载http服务器零宕机时间兼容systemdsupervisor

    `Go-graceful`是一个专门设计用于处理HTTP服务器的优雅重启和关闭的Go库。它允许你在不中断现有连接的情况下进行服务的更新或重启,这对于提供不间断服务的在线应用至关重要。零宕机时间的实现是通过保持旧服务器...

    前端开源库-graceful-ncp

    `graceful-ncp`是一个专门为前端开发者设计的开源库,它实现了优雅的、异步的文件和目录的递归复制功能。这个库的核心目标是提供一种更稳定、更易用的方式来处理文件系统操作,特别是在处理大量文件或复杂目录结构时...

    Laravel开发-graceful-cache

    `graceful-cache`是一个针对Laravel的缓存存储库的包装器,其目标是提供一种更加优雅、灵活的方式来管理你的应用缓存。在这个项目中,开发者可以更好地控制缓存的生命周期,提高应用的效率。 `graceful-cache`的...

    Graceful Graph

    优雅图(Graceful Graph)是图论中的一个概念,它源于数学和计算机科学,特别是网络流和图遍历的问题。这个概念是由美国数学家Edward G. Kolaitis在1970年代提出的,目的是研究图的标号特性。在英特尔线程挑战赛3月...

    前端开源库-graceful-readlink

    优雅的前端开源库——`graceful-readlink`是一个针对`fs.readlink`进行优化的模块,主要用于解决Node.js在处理符号链接时可能出现的问题。在Node.js原生的`fs`模块中,`fs.readlink`函数用于读取符号链接(symbolic ...

    graceful:写优雅服务的库

    控制优雅的应用程序 优雅的应用程序可以用信号来控制。 主进程支持以下信号 期限/INT 快速关机 放弃正常关机 合肥 重启工人 启动新的工作进程 优雅关闭旧的工作进程 USR2 升级可执行文件(启动新的主进程和工作进程...

    前端开源库-graceful-kill

    本文将深入探讨“graceful-kill”的概念、作用以及它如何改善前端应用程序的性能。 1. 优雅地杀死进程 在计算机系统中,进程的正常退出通常涉及清理资源、保存状态和关闭连接等操作。"优雅地杀死"一个进程意味着...

    java程序发布成window后服台

    本文将详细讲解如何将一个Java程序打包并发布为Windows后台服务,同时提供一个具体的示例。 首先,我们需要理解Java服务的概念。在Windows操作系统中,服务是一种在没有用户界面的情况下运行的特殊类型的应用程序,...

    Laravel开发-graceful-laravel-workers

    3. **优雅关闭(Graceful Shutdown)**:在“graceful-laravel-workers”中,主要目标是实现优雅关闭,即在接收到停止命令时,工作进程会等待当前处理的任务完成后再退出,确保数据的一致性和完整性。 4. **...

    graceful-fs-fs模块的一个替代拥有各种改进

    优雅的fs(graceful-fs)是Node.js生态系统中一个重要的模块,它作为原生fs模块的一个增强版本,提供了一系列的改进和优化,旨在提高文件系统的操作性能和稳定性。在Node.js开发过程中,文件系统操作是不可或缺的一...

    RFC8538 Notification Message Support for BGP Graceful Restart

    **BGP Graceful Restart**(优雅重启)是一种使边界网关协议(BGP)能够在路由器重启时保持部分连接状态的方法,从而减少对网络的影响。在**RFC4724**中定义了这一机制,但它限制了BGP优雅重启的应用范围,即不包括...

    express-graceful-exit, 为了得到零停机,优雅地退出 Express.zip

    express-graceful-exit, 为了得到零停机,优雅地退出 Express express-graceful-exit具有零停机时间的组件为 node.js 使用 Express 部署。 它是为 3. X, 开发的,因此它可能需要与 Express 2.x 兼容。这个模块最初是...

    Functional Programming in C++

    Functional Programming in C++ teaches developers the practical side of functional programming and the tools that C++ provides to develop software in the functional style. This in-depth guide is full ...

    javaAJAX无刷技术

    Java AJAX无刷技术是一种网页开发方法,它允许页面在不刷新整个页面的情况下与服务器进行交互,从而提升用户体验。AJAX(Asynchronous JavaScript and XML)并不是一种单一的技术,而是一组技术的组合,包括...

    前端开源库-graceful-fs-extra

    `graceful-fs-extra`是一个针对Node.js环境的`fs`模块扩展库,它在原生`fs`模块的基础上增加了一些实用功能,并提供了更优雅的错误处理机制,使得文件操作更加高效和稳定。本文将深入探讨`graceful-fs-extra`库的...

    BGP Graceful Restart

    【BGP Graceful Restart】是BGP(Border Gateway Protocol)的一种特性,旨在确保在路由器或协议处理组件(如Route Processor,RP)重启时,路由信息的连续性和稳定性,避免网络中断。这一特性允许BGP Speaker...

    Scalable IO in Java -Doug Lea

    在Java中实现可扩展的IO操作是一个复杂且重要的主题,尤其是对于需要处理大量并发连接的服务器应用程序。本文将介绍Scalable IO in Java一书,其作者是Doug Lea,他同时也是Java并发编程领域的权威。在这本书中,Lea...

    go-graceful-restart-example, 具有优雅重启功能的服务器示例.zip

    go-graceful-restart-example, 具有优雅重启功能的服务器示例 服务器使用 Go graceful重新启动安装并运行服务器$ go get github.com/Scalingo/go-graceful-restart-example$ go-graceful-restart-examp

    A fresh 3D image slider with graceful fallback

    标题 "A fresh 3D image slider with graceful fallback" 指的是一种新型的3D图像轮播组件,它带有优雅的回退功能。在网页设计中,图像轮播是一种常见且吸引用户注意力的方式,用于展示多张图片或内容。3D效果则为...

Global site tag (gtag.js) - Google Analytics