Java中文字符所占的字节数是多少?

Python012

Java中文字符所占的字节数是多少?,第1张

采用GB2312或GBK编码方式时,一个中文字符占2个字节;而采用UTF-8编码方式时,一个中文字符会占3个字节。

Java简介

1、Java最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java”的名称正式发布。

2、Java的主要工作是通过编程语言来制作互联网页面、制作动态效果以及网站等技术,现在网上关于这方面的教程有很多,但很多都是过时的,因为互联网是在不断的变化的,互联网上的牛人,要想成为Java大神,走进这条Java大神之群,首先Java教程的开头是二三一,Java的最中间是三一四,Java的最后面再加上零二八,把前面的综合起来,Java大神期待你的加入。这里有很多互联网大牛教你学习,还有免费的课程。不是想学习的就不要加了。

3、Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心,Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

4、Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE1.4.2 发布后,Java 的执行速度有了大幅提升。

5、与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。

下满给出示例代码,希望对你有帮助Java中判断字符串的编码有两种思路:一种是根据byte的长度判断,英文的字母数字好标点符号都是一个byte,且值在0-255之间另一种是根据中文的Unicode取值范围判断,这个就是把所以的范围都包含,才能判断正确,参考unicode中文范围:http://www.yuanxingyuan.com/?id=14示例代码:import java.util.regex.Matcherimport java.util.regex.Patternpublic class StringTest { //英文占1byte,非英文(可认为是中文)占2byte,根据这个特性来判断字符 public static boolean checkChar(char ch) { if ((ch + "").getBytes().length == 1) { return true//英文 } else { return false//中文 } } public static String checkString(String str) { String res = "" if (str != null) { for (int i = 0i <str.length()i++) {//只要字符串中有中文则为中文if (!checkChar(str.charAt(i))) { res = "中文"break } else { res = "英文" } } } return res} //判断是不是中文 public static boolean isChinese(char c) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(c) if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) { return true } return false} //判断是不是英文字母 public static boolean isEnglish(String charaString) { return charaString.matches("^[a-zA-Z]*")} //根据中文unicode范围判断u4e00 ~ u9fa5不全 public static String isChinese(String str) { String regEx1 = "[\\u4e00-\\u9fa5]+" String regEx2 = "[\\uFF00-\\uFFEF]+" String regEx3 = "[\\u2E80-\\u2EFF]+" String regEx4 = "[\\u3000-\\u303F]+" String regEx5 = "[\\u31C0-\\u31EF]+" Pattern p1 = Pattern.compile(regEx1) Pattern p2 = Pattern.compile(regEx2) Pattern p3 = Pattern.compile(regEx3) Pattern p4 = Pattern.compile(regEx4) Pattern p5 = Pattern.compile(regEx5) Matcher m1 = p1.matcher(str) Matcher m2 = p2.matcher(str) Matcher m3 = p3.matcher(str) Matcher m4 = p4.matcher(str) Matcher m5 = p5.matcher(str) if (m1.find() || m2.find() || m3.find() || m4.find() || m5.find()) return "中文" else return "英文"} public static void main(String[] args) { System.out.println("使用长度判断:") System.out.println(checkString("Hello++")) System.out.println(checkString("Hello++。、,?")) System.out.println(checkString("Hello++编程")) System.out.println(checkString("编程")) System.out.println("\r\n使用正则表达式判断:") System.out.println(isChinese("Hello++")) System.out.println(isChinese("Hello++。、,?")) System.out.println(isChinese("Hello++编程")) System.out.println(isChinese("编程")) System.out.println("\r\n使用Character.UnicodeBlock") System.out.println(isChinese('h')?"中文":"英文") System.out.println(isChinese(',')?"中文":"英文") System.out.println(isChinese('。')?"中文":"英文") System.out.println(isChinese('编')?"中文":"英文")}}运行结果:使用长度判断:英文中文中文中文使用正则表达式判断:英文中文中文中文使用Character.UnicodeBlock英文英文中文中文