首页 > 编程知识 正文

c++判断中文字符,python怎么判断中文

时间:2023-05-06 17:36:00 阅读:277511 作者:762

       开发中需要判断某个字符或者字符串是中文还是英文,从而做相应的处理,大多数会用到正则来判断的,其实也可以使用 Java 来判断。

Java Character 实现Unicode字符集介绍  CJK中文字符和中文标点等判断。此外,该类提供了用于确定字符的分类的几种方法(小写字母,数字,等)和由大写转换为小写字符,反之亦然。

    Unicode中文范围参考文章:http://www.iteye.com/topic/558050

汉字:[0x4e00,0x9fa5](或十进制[19968,40869])

数字:[0x30,0x39](或十进制[48, 57])

小写字母:[0x61,0x7a](或十进制[97, 122])

大写字母:[0x41,0x5a](或十进制[65, 90])

在Java中,主要使用 Character类处理字符有关功能,Character 类中有3个静态内部类:

UnicodeBlock 与 UnicodeScript 关系:

1、UnicodeScript实现是在Java 7中新引入,UnicodeScript 是从语言书写规则层次对Unicode字符的分类,

2.、在一个 UnicodeScript中的字符可能分散在多个UnicodeBlock中;

3.、一个 UnicodeBlock中的字符可能会被划进多个UnicodeScript中。

中文的标点符号主要存在于以下5个UnicodeBlock中:

U2000-General Punctuation (百分号,千分号,单引号,双引号等)U3000-CJK Symbols and Punctuation ( 顿号,句号,书名号,〸,〹,〺 等;PS: 后面三个字符你知道什么意思吗? : )    )UFF00-Halfwidth and Fullwidth Forms ( 大于,小于,等于,括号,感叹号,加,减,冒号,分号等等)UFE30-CJK Compatibility Forms  (主要是给竖写方式使用的括号,以及间断线﹉,波浪线﹌等)UFE10-Vertical Forms (主要是一些竖着写的标点符号,    等等)

编写的工具类和测试代码如下: import java.util.regex.Pattern;/** * @Description: 判断中文(汉字和标点符号)与英文工具类 * @Date: 2020-04-24 15:43 * @Version: V1.0 */public class ChineseAndEnglishUtils { private ChineseAndEnglishUtils() { } /** * 使用UnicodeBlock方法判断是否存在中文(包括汉字, 标点符号判断) * * @param str * @return true-存在,false-不存在 */ public static boolean checkChinesePunctuationByScript(String str) { if (str == null) { return false; } char[] chars = str.toCharArray(); for (char aChar : chars) { if (isChineseByScript(aChar)) { return true; } } return false; } /** * 使用UnicodeScript方法判断是否存在中文(包括汉字, 标点符号判断) * * @param str * @return true-存在,false-不存在 */ public static boolean checkChinesePunctuationByBlock(String str) { if (str == null) { return false; } char[] chars = str.toCharArray(); for (char aChar : chars) { if (isChineseByBlock(aChar)) { return true; } } return false; } /** * 使用Unicode编码范围来判断是否存在汉字, 标点符号不做判断 * * @param str * @return true-存在,false-不存在 */ public static boolean checkChineseByUnicodeRange(String str) { if (str == null) { return false; } String regEx = "[\u4e00-\u9fa5]+"; Pattern pattern = Pattern.compile(regEx); return pattern.matcher(str.trim()).find(); } /** * 使用UnicodeBlock方法判断是否存在汉字, 标点符号不做判断 * * @param c * @return true-存在,false-不存在 */ public static boolean isChineseByBlock(char c) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(c); if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT) { return true; } else { return false; } } /** * 使用UnicodeScript方法判断是否存在汉字, 标点符号不做判断 * * @param c * @return true-存在,false-不存在 */ public static boolean isChineseByScript(char c) { Character.UnicodeScript sc = Character.UnicodeScript.of(c); if (sc == Character.UnicodeScript.HAN) { return true; } return false; } /** * 根据UnicodeBlock方法判断中文标点符号 * * @param c * @return true-存在,false-不存在 */ public static boolean isChinesePunctuation(char c) { Character.UnicodeBlock ub = 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) { return true; } else { return false; } } public static void main(String[] args) { System.out.println("=====使用Unicode编码范围来判断是否存在汉字, 标点符号不做判断======"); System.out.println("abc中国,.d==" + checkChineseByUnicodeRange("abc中国,.d")); System.out.println("abc中d==" + checkChineseByUnicodeRange("abc中d")); System.out.println("abc,.d==" + checkChineseByUnicodeRange("abc,.d")); System.out.println("=====使用UnicodeBlock方法判断是否存在中文(包括汉字, 标点符号判断)====="); System.out.println("abc中国,.d==" + checkChinesePunctuationByBlock("abc中国,.d")); System.out.println("abc中d==" + checkChinesePunctuationByBlock("abc中d")); System.out.println("abc,.d==" + checkChinesePunctuationByBlock("abc,.d")); System.out.println("=====使用UnicodeScript方法判断是否存在中文(包括汉字, 标点符号判断)====="); System.out.println("abc中国,.d==" + checkChinesePunctuationByScript("abc中国,.d")); System.out.println("abc中d==" + checkChinesePunctuationByScript("abc中d")); System.out.println("abc,.d==" + checkChinesePunctuationByScript("abc,.d")); System.out.println("=====根据UnicodeBlock方法判断中文标点符号====="); System.out.println(".==" + isChinesePunctuation('.')); System.out.println("。==" + isChinesePunctuation('。')); }}

     

ends~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。