遍历字符串

首先必须要知道,Java字符串不是char数组而是Unicode序列,这是很多C/C++程序员转Java时会遇到的坑

为什么Java要用Unicode编码机制来定义String中的字符单元呢?

这就与Java强大的字符兼容性有关了,Java这正是因为采用了Unicode才可以兼容多国语言,或是各种奇怪的符号

所有常用的字符在Unicode中用一个代码单元表示,而一些特殊的字符则需要两个代码单元才能表示,而char类型只能描述一个代码单元,因此如果不注意就会出现字符转换的问题

码点(code point)表示Unicode机制下的每一个字符单元,因此在对String的每一个字符元操作需要使用codepoint而不是像C/C++中的数组下标

好了,言归正传,我们来看看怎么在Java中遍历字符串

for( int i = 0; i < str.length(); i++){
            System.out.println(str[i]);
        }

请新转Java的朋友们看看,这个对吗?

当然不对了!String不是Array! 这直接就是语法错误,正确如下:


	for( int i = 0; i < str.length(); i++){
            System.out.println(str.charAt(i));
        }


这个就对了,但是你觉得怎么样?好吗?

当然不好了!不都说了要用codepoint吗?!!!

	for( int i = 0; i < str.length(); i++){
            System.out.println(str.charAt(i));
        }

	int[] codePoints = str.codePoints().toArray();
        for( int i = 0; i < codePoints.length; i++ ){
            System.out.printf("%c\n", codePoints[i]);
        }

这样就对了!codePoints用来记录String中的每一个码点

这里要注意一下,你可能会这样写:

	for( int i = 0; i < str.length(); i++){
            System.out.println(str.charAt(i));
        }

	for( int i = 0; i < str.length(); i++){
            System.out.printf("%c\n", str.codePointAt(i));
        }

但是这样也是不安全的,因为 str.length返回的是字符串中 代码单元的数量 (特殊字符占据两个代码单元)

因此想要得到实际长度还得是码点数量

int cpCount = str.codePointCount(0, greeting.length());//参数表示从头到尾统计

如果你有更好的方法欢迎留言!

	for( int i = 0; i < str.length(); i++){
            System.out.println(str.charAt(i));
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值