Java判断中英文符号、标点的实现
本文介绍了Java判断中英文符号、标点的实现,分享给大家,具体如下:
方法一、用unicodeBlock和unicodeScript判断
在Java中,主要使用Character类处理字符有关功能,而JDK1.7中Character是按照Unicode6.0版本实现的,所以这个要先学习下常用的Unicode编码。
其中的UnicodeBlock和UnicodeScript类可以帮助我们判断字符类型,UnicodeBlock是Unicode标准协会组织unicode码的一个基本单位,实际上一个UnicodeBlock代表一片连续的Unicode号码段,UnicodeBlock之间不重叠。例如,通常我们利用Unicode编码是否在0x4E00–0x9FCC来判断某字符是否为汉字,就是因为,有个UnicodeBlock专门划分为存储汉字(准确的说是CJK统一汉字),这个UnicodeBlock叫做CJKUnifiedIdeographs,总共定义了74,617个汉字。
UnicodeBlock与UnicodeScript关系:
所以UnicodeScript是从语言书写规则层次对Unicode字符的分类,这是用使用角度划分,而UnicodeBlock是从硬的编码角度划分。
1.UnicodeBlock是简单的数值范围(其中可能有些Block中会有一些尚未分配字符的“空号”)。
2.在一个UnicodeScript中的字符可能分散在多个UnicodeBlock中;
3.一个UnicodeBlock中的字符可能会被划进多个UnicodeScript中。
判别中文标点符号。
因为中文的标点符号主要存在于以下5个UnicodeBlock中,
U2000-GeneralPunctuation(百分号,千分号,单引号,双引号等)
U3000-CJKSymbolsandPunctuation(顿号,句号,书名号,〸,〹,〺等;PS:后面三个字符你知道什么意思吗?:) )
UFF00-HalfwidthandFullwidthForms(大于,小于,等于,括号,感叹号,加,减,冒号,分号等等)
UFE30-CJKCompatibilityForms (主要是给竖写方式使用的括号,以及间断线﹉,波浪线﹌等)
UFE10-VerticalForms(主要是一些竖着写的标点符号,等等)
//根据UnicodeBlock方法判断中文标点符号
publicbooleanisChinesePunctuation(charc){
Character.UnicodeBlockub=Character.UnicodeBlock.of(c);
if(ub==Character.UnicodeBlock.GENERAL_PUNCTUATION
||ub==Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
||ub==Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
||ub==Character.UnicodeBlock.CJK_COMPATIBILITY_FORMS
||ub==Character.UnicodeBlock.VERTICAL_FORMS){
returntrue;
}else{
returnfalse;
}
}
方法二、用字符范围判断
staticbooleanisSymbol(charch)
{
if(isCnSymbol(ch))returntrue;
if(isEnSymbol(ch))returntrue;
if(0x2010<=ch&&ch<=0x2017)returntrue;
if(0x2020<=ch&&ch<=0x2027)returntrue;
if(0x2B00<=ch&&ch<=0x2BFF)returntrue;
if(0xFF03<=ch&&ch<=0xFF06)returntrue;
if(0xFF08<=ch&&ch<=0xFF0B)returntrue;
if(ch==0xFF0D||ch==0xFF0F)returntrue;
if(0xFF1C<=ch&&ch<=0xFF1E)returntrue;
if(ch==0xFF20||ch==0xFF65)returntrue;
if(0xFF3B<=ch&&ch<=0xFF40)returntrue;
if(0xFF5B<=ch&&ch<=0xFF60)returntrue;
if(ch==0xFF62||ch==0xFF63)returntrue;
if(ch==0x0020||ch==0x3000)returntrue;
returnfalse;
}
staticbooleanisCnSymbol(charch){
if(0x3004<=ch&&ch<=0x301C)returntrue;
if(0x3020<=ch&&ch<=0x303F)returntrue;
returnfalse;
}
staticbooleanisEnSymbol(charch){
if(ch==0x40)returntrue;
if(ch==0x2D||ch==0x2F)returntrue;
if(0x23<=ch&&ch<=0x26)returntrue;
if(0x28<=ch&&ch<=0x2B)returntrue;
if(0x3C<=ch&&ch<=0x3E)returntrue;
if(0x5B<=ch&&ch<=0x60)returntrue;
if(0x7B<=ch&&ch<=0x7E)returntrue;
returnfalse;
}
staticbooleanisPunctuation(charch){
if(isCjkPunc(ch))returntrue;
if(isEnPunc(ch))returntrue;
if(0x2018<=ch&&ch<=0x201F)returntrue;
if(ch==0xFF01||ch==0xFF02)returntrue;
if(ch==0xFF07||ch==0xFF0C)returntrue;
if(ch==0xFF1A||ch==0xFF1B)returntrue;
if(ch==0xFF1F||ch==0xFF61)returntrue;
if(ch==0xFF0E)returntrue;
if(ch==0xFF65)returntrue;
returnfalse;
}
staticbooleanisEnPunc(charch){
if(0x21<=ch&&ch<=0x22)returntrue;
if(ch==0x27||ch==0x2C)returntrue;
if(ch==0x2E||ch==0x3A)returntrue;
if(ch==0x3B||ch==0x3F)returntrue;
returnfalse;
}
staticbooleanisCjkPunc(charch){
if(0x3001<=ch&&ch<=0x3003)returntrue;
if(0x301D<=ch&&ch<=0x301F)returntrue;
returnfalse;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。