zoukankan      html  css  js  c++  java
  • [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。

  • 相关阅读:
    SpringBoot整合Ehcache
    SpringCache整合Redis
    SpringBoot使用mongo搭建RESTful风格
    SpringBoot使用JPA搭建RESTful风格
    SpringBoot操作mongo的两种方法
    Nginx负载均衡
    【Java杂货铺】用Security做权限极简入门
    【Java杂货铺】JVM#虚拟机加载机制
    【Java杂货铺】JVM#Class类结构
    【Java杂货铺】JVM#Java高墙之GC与内存分配策略
  • 原文地址:https://www.cnblogs.com/iiiiiher/p/12371129.html
Copyright © 2011-2022 走看看