[java]string类型

在Java中什么是 Primitive 和 Reference 类型

String类

   1. 首先String不属于8种基本数据类型,String是一个对象。 
     因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 

  2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null; 

  3. String str=”kvill”; 
    String str=new String (“kvill”);的区别: 

不可变

字符串常用方法

public class Person implements java.io.Serializable {
    public static void main(String[] args) {
        String s = "maotai我";
        //获取长度
        System.out.println(s.length()); //7
        //转换为字节数组
        System.out.println(Arrays.toString(s.getBytes()));//[109, 97, 111, 116, 97, 105]
        System.out.println(Arrays.toString(s.toCharArray()));//[m, a, o, t, a, i, 我]

        //是否包含另一个字符串
        System.out.println(s.contains("mao"));//true

        System.out.println("maotai我" == s); //地址值比较
        //字符串内容比较(重写了equals)
        System.out.println("mao".equals(s));//false
        //字符串内容比较忽略大小写
        System.out.println("MaoTai我".equalsIgnoreCase(s));//true
        System.out.println(s.startsWith("ma")); //true
        System.out.println(s.endsWith("ma"));   //false
        System.out.println(s.indexOf("a"));     //1
        System.out.println(s.lastIndexOf("a"));     //4
        //拼接字符串
        System.out.println(s.concat("maomao"));//maotai我maomao
        //替换
        System.out.println(s.replace("m", "t"));//taotai我
        
        System.out.println(s.trim());
        System.out.println(s.isBlank());//false
        System.out.println(s.isEmpty());//false
        
        System.out.println(s.toLowerCase());//maotai我
        System.out.println(s.toUpperCase());//MAOTAI我
        
        System.out.println(s.hashCode());//836769232

        System.out.println(Arrays.toString(s.split("a")));//[m, ot, i我]
    }
}

数组转字符串

如果是单字节/字符数组,利用String构造函数

此时发现jdk api手册挺好用:

byte[] arr = {'a', 'b', 'c'};
System.out.println(new String(arr)); //abc


char[] arr = {'a', 'b', '我'};
System.out.println(new String(arr)); //ab我

如果是字符串数组,使用StringBuffer类

String[] arr = {"abc", "bcd", "def"};
StringBuffer sb = new StringBuffer();
for (String s : arr) {
    sb.append(s);
}
System.out.println(sb.toString());//abcbcddef
int[] arr = {11,22,33};
StringBuffer sb = new StringBuffer();
for (Integer s : arr) {
    sb.append(s);
}
System.out.println(sb.toString());//112233

字符串转数组

s.getBytes和s.toCharArray

String s = "maotai我";
System.out.println(Arrays.toString(s.getBytes()));//[109, 97, 111, 116, 97, 105, -26, -120, -111]
System.out.println(Arrays.toString(s.toCharArray()));//[m, a, o, t, a, i, 我]

s.split

String s = "a毛台a爱a大毛毛";
System.out.println(Arrays.toString(s.split("a"))); //[, 毛台, 爱, 大毛毛]

利用Arrays.toString工具类查看数组内容

一般用于查看数组内容

int[] arr = {1,2,3};
System.out.println(arr); //[I@33c7353a
System.out.println(Arrays.toString(arr)); //[1, 2, 3]

StringBuffer类

Java基础——数组应用之StringBuilder类和StringBuffer类
跟String没继承关系, 所以不能互相强转.
大多数方法跟String一样.

StringBuffer类也代表字符串, 内部实现跟String不一样
StringBuffer在进行字符串处理时,不生成新的对象

所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。

StringBuffer对象的每次修改都会改变对象自身,这点是和String类最大的区别。
StringBuffer是线程安全的.

         String s = “abc”;

         StringBuffer sb1 = new StringBuffer(“123”);

         StringBuffer sb2 = new StringBuffer(s);   //String转换为StringBuffer

         String s1 = sb1.toString();                          //StringBuffer转换为String

1、它是一个容器。可以存储任意类型的元素(数据)。
2、它是多线程安全的。
3、可变长度的。
4、可以对其中存入的内容和长度进行修改。
5、容器通常都会具备一些基本的方法,添加、删除、修改、获取。curd =>create update read delete
6、字符串缓冲区最终还是要转换成字符串数据给别人使用。

增加:

StringBuffer append(value);
StringBuffer insert(index  , value);
append和insert方法的区别:
|--append方法只能在尾部追加。
|--insert方法可以在任意位置添加。

sb.append(“a”)..append(9).append(‘a’)   输出结果为:a9a


删除:
StringBuffer delete(start,end);//当end的值大于字符串最大角标,则end等于最大角标
StringBuffer deleteCharAt(index);//删除指定字符

修改:
StringBuffer replace(start,end,str)//替换指定长度的字符串
void setCharAt(index,shar) //替换指定位置的字符

获取:
indexOf//获取字符所在位置
length();//获取字符串长度
charAt();//获取指定角标的字符
substring(start);//获取从指定位置到结尾的字符串
substring(start,end);//获取从start—end-1角标的字符串

StringBuffer  setLength(0);清空缓冲区  setLength(index)设置缓冲区的长度。
sb.StringBuffer delete(0,sb.length()) 清空缓冲区

StringBuilder类

StringBuffer的升级版. 为类提高效率, 是不安全的.
1、提高效率
2、简化代码
3、提高安全

StringBuilder与StringBuffer都继承自AbstractStringBuilder类
是可变的

最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。

posted @ 2020-02-27 11:25  mmaotai  阅读(747)  评论(0编辑  收藏  举报