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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。