java 字符 几个字节_java中字符串占几个字节「建议收藏」

java 字符 几个字节_java中字符串占几个字节「建议收藏」首先,char为Java的基本类型,基本类型所占的字节数是固定的,如int占4字节,double占8字节,这可以使得Java在不同的平台上所占类型固定,很好地保证了Java的可移植性。因此,Java中char类型固定占2个字节。(注:char类型也可以存储一个汉字)。其次,String采用一种更灵活的方式进行存储。在String中,一个英文字符占1个字节,而中文字符根据编码的不同所占字节数也不同。…

大家好,又见面了,我是你们的朋友全栈君。

dc1e68869f05e0d5f97e1254b34ca3b0.png

首先,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入门教程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153142.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springmvc 适配器详解[通俗易懂]

    springmvc 适配器详解[通俗易懂]大家知道springmvc是一个非常优良的框架,配置灵活实现简单,只需我们更多的关注我们的业务逻辑。今天我们就通过一个简单的例子模拟适配生成过程。处理器适配器HandlerAdapter1、SimpleControllerHandlerAdapter表示所有实现了org.springframework.web.servlet.mvc.Controller接口的Bean可以作

    2022年5月12日
    40
  • linux网络配置出现E325,Linux启动vi编辑器提示E325:

    linux网络配置出现E325,Linux启动vi编辑器提示E325:vi编辑器是linux的文本编辑器,在linux系统的运用非常广泛,不少朋友在打开vi编辑器的时候提示e325:attention错误,遇到这种情况该怎么办吗?下面秋天网Qiutian.ZqNF.Com小编就给大家介绍下linux打开vi编辑器时提示e325:attention的解决方法。当打开vi编辑器时出现以下的提示时不要着急e325:attentionfoundaswapfile…

    2022年5月19日
    34
  • 考研数学常见的不等式及其证明[通俗易懂]

    考研数学常见的不等式及其证明[通俗易懂]几个常用的不等式1.伯努利不等式命题:设h>−1,n∈N+h>-1,n\in\mathbf{N}_{+}h>−1,n∈N+​,则成立不等式(1+h)n⩾1+nh(1+h)^{n}\geqslant1+nh(1+h)n⩾1+nh其中当n>1n>1n>1时成立等号的充分必要条件是h=0h=0h=0证明:由于n=1n=1n=1或h=0h=0h=0时不等式明显成立(且其中均成立等号),一下只需讨论n>1n>1n>1和h≠0h\neq

    2022年5月5日
    45
  • draggable的用法_draggable

    draggable的用法_draggable一、概述通过前面几节学习,大家应该都知道了,一个div对象是可以通过拖拉来改变大小,也可以通过拖动来改变其位置的。如何改变大小已经讲解过了,那么怎么实现拖动改变位置呢?现在就开始讲解如何实现拖动-

    2022年8月6日
    7
  • springboot mybatis缓存_secure boot未正确配置

    springboot mybatis缓存_secure boot未正确配置什么是缓存?简单来讲,缓存就是存储在缓冲区里的内容,或者可以理解为存在内存中的内容。用户可以将经常查询的内容放到缓存中,再次使用时直接从缓存中取值,而不需要再查询数据库。这样做的优点是响应迅速,减少了系统资源(网络资源、CPU资源等)开销;缺点是需要占用内存资源,服务器一旦关机,缓存就会丢失,重启后需要重新将写一遍数据到内存。Mybatis的缓存Mybatis的缓存分为一级缓存和二级缓存。一级缓存是默认开启的,二级缓存需要手动开启。一级缓存是SqlSession级别的缓存,作用域是一个SqlSess

    2022年9月19日
    2
  • 手机连接服务器工具Termius使用<IOS版本>

    手机连接服务器工具Termius使用<IOS版本>

    2021年5月31日
    125

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号