Java字符串所占字节数的小总结
时间:2022-07-24
本文章向大家介绍Java字符串所占字节数的小总结,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
首先,char为Java的基本类型,基本类型所占的字节数是固定的,如int占4字节,double占8字节,这可以使得Java在不同的平台上所占类型固定,很好地保证了Java的可移植性。因此,Java中char类型固定占2个字节。(注:char类型也可以存储一个汉字)。 其次,String采用一种更灵活的方式进行存储。在String中,一个英文字符占1个字节,而中文字符根据编码的不同所占字节数也不同。在UTF-8编码下,一个中文字符占3个字节;而使用GBK编码时一个中文字符占2个字节。测试代码如下:
import java.io.UnsupportedEncodingException;
public class StrTest {
public static void main(String[] args) throws UnsupportedEncodingException {
String str1 = "hello";
String str2 = "你好abc";
System.out.println("utf-8编码下'hello'所占的字节数:" + str1.getBytes("utf-8").length);
System.out.println("gbk编码下'hello'所占的字节数:" + str1.getBytes("gbk").length);
System.out.println("utf-8编码下'你好abc'所占的字节数:" + str2.getBytes("utf-8").length);
System.out.println("gbk编码下你好'你好abc'所占的字节数:" + str2.getBytes("gbk").length);
}
}
输出结果: utf-8编码下’hello’所占的字节数: 5 gbk编码下’hello’所占的字节数: 5 utf-8编码下’你好abc’所占的字节数: 9 gbk编码下你好’你好abc’所占的字节数: 7
由此可见,对也String来说,一个英文字符固定占1个字节,而中文字符占2个(GBK编码)或3个(UTF-8编码)字节。也可使用此方法查看其它编码的情况,此处不再一一赘述。
最后,基于String的这种特性,可以判断一个字符串中是否包含中文,举例如下:
public class StrTest {
public static void main(String[] args) throws UnsupportedEncodingException {
searchChineseCharacter("Good morning");
searchChineseCharacter("hello 早上好");
}
//找出一个字符串中的汉字
public static void searchChineseCharacter(String str){
//正则表达式,用于匹配中文字符
String regex = "[u4e00-u9fa5]";
//如果str的长度和其所占字节数不等,说明包含中文
if (str.length() != str.getBytes().length){
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
System.out.print("'" + str + "' 中的汉字为:");
while (matcher.find()){
System.out.print(matcher.group());
}
}
else {
System.out.println("'" + str + "' 中无汉字");
}
}
}
输出结果: ‘Good morning’ 中无汉字 ‘hello 早上好’ 中的汉字为:早上好
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- C++核心准则T.122:使用模板在编译时计算类型
- C++核心准则T.123:使用常量表达式函数在编译时求值
- Java基础 【类之间的关系】
- MySql 学习之路-基础
- (有趣的)项目实战:Java实现计算机自动关机
- 猜生日 Java小游戏
- KDD Cup 2020多模态召回比赛亚军方案与搜索业务应用
- 一文快速入门分库分表(必修课)
- MySQL · 物理备份 · XtraBackup备份原理
- Cortex: 高可用和水平扩展Prometheus监控系统
- 从0开始聊聊自动化静态代码审计工具
- WebSphere XXE 漏洞分析(CVE-2020-4643)
- 专项行动的意外收获—— 2020 年 9 月墨子(Mozi)僵尸网络分析报告
- React 17.0.0-rc.2带来全新的JSX转换
- 下载b站外挂字幕,用 potplayer 播放视频也能看字幕了