写点什么

String 源码解析 -String 的使用注意 2

作者:zarmnosaj
  • 2022 年 5 月 11 日
  • 本文字数:1143 字

    阅读完需:约 4 分钟

String 源码解析-String 的使用注意

String 的拆分

对于 String 拆分,我们常用的方法是 spit,此方法声明的源代码:


    public String[] split(String regex, int limit) {        ......    }        public String[] split(String regex) {        ......    }
复制代码


方法有两个入参,一个是用于拆分的标准字符,另一个参数是限制用于拆分成几个元素。


另一个重载方法是一个参数,只包含一个用于拆分的字符,默认全部拆分。


Demo:


public class Demo {
public static void main(String[] args) { String s = "a,b,c"; System.out.println(s.split(",", 1)); System.out.println(s.split(",")); }}
复制代码


两个方法拆分的结果是不同的,limit 参数会起到限制的作用,而且从结果可以看出不会再包含有拆分的字符。


再看以下 Demo:


public class Demo {
public static void main(String[] args) { String s = ",a,b,c"; String[] split = s.split(","); }}
复制代码


最后的结果:0 = ""1 = "a"2 = "b"3 = "c"可以看到,在返回数组的 0 位置,有一个空字符,String 原生 api 没有提供可以去掉空格的字符串拆分方法,可以使用一些其他第三方 api:


public class Demo {
public static void main(String[] args) { String s = ",a,b,c"; List<String> list = Splitter.on(',') .trimResults() .omitEmptyStrings() .splitToList(a); }}
复制代码


这是 Guava 提供的 API,对字符串进行分割,trimResults()表示方法内部会去掉空格,omitEmptyStrings()表示方法会去掉空值。

String 的拼接

拼接一般使用的方法是 join(),代码 Demo:


String result = String.join("-",“a”,“b”,“c”,“d”);String result2 = String.join("-",“a”,“b”,“c”,“d”).join("-",“a”,“b”);result输出:a-b-c-dresult2输出:a-b
复制代码


可以看出,如果进行连续拼接,最后一次的拼接会把前面所有的拼接全部覆盖。Guava 也有相应的 api 提供,可以避免覆盖:


Joiner joiner = Joiner.on(",").skipNulls();String result = joiner.join("hello","world").join("hello","world");

result结果为;hello,world,hello,world
复制代码


此外,Joiner 还可以拼接字符串 List 的所有参数,这里就不再贴相应代码,有兴趣可以进一步了解。

字符串的乱码问题

此处只是简单的提一下,不少时候会遇到字符串乱码的问题,比如打印一个字符串,结果打印的结果为???,其具体原因还是因为编码有问题。此时可以显示的写明编码方式,如:


String s1  ="hi 姜夔";byte[] bytes = s1.getBytes("UTF-8");String s2 = new String(bytes);System.out.println(s2);
复制代码


此时 s2 就不会乱码,因为此处显示的指定了编码集为 UTF-8.

用户头像

zarmnosaj

关注

还未添加个人签名 2020.02.06 加入

还未添加个人简介

评论

发布
暂无评论
String源码解析-String的使用注意2_5月月更_zarmnosaj_InfoQ写作社区