其次,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’所占的字节数: 5gbk编码下’hello’所占的字节数: 5utf-8编码下’你好abc’所占的字节数: 9gbk编码下你好’你好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中字符串占几个字节的详细内容。