java中String

字符串类型的特点

  • 1、不能被继承
    • 因为String是final修饰的类
  • 2、字符串对象是常量对象,一旦创建就不能修改,一旦修改就是新对象
  • 3、因为字符串对象是常量对象,那么可以共享,字符串常量对象是在常量池中
    • 常量池在哪里
      • JDK1.6,方法区
      • JDK1.7,堆
      • JDK1.8,元空间
  • 4、任何字符串字面量都是String的对象
  • 5、字符串底层使用字符数组存储
  • 6、字符数组是private final修饰符

拼接和比较

  • 1、创建对象的个数
    • String str1 = “hello”;
      String str2 = “hello”;
      • 一个,在常量池
    • String str1 = new String(“hello”);
      String str2 = new String(“hello”);
  • 三个
    • 一个在常量池
      - 两个在堆中
  • 2、拼接和比较
    • 原则:+两边都是常量,结果也是常量,+两边有一个是变量,结果就不是常量,在堆中,如果结果使用了intern(),那么是常量
      @Test
      public void test3(){
      String str1 = “hello”;
      String str2 = “java”;
      String str3 = “hellojava”;
      String str4 = “hello” + “java”;//常量与常量拼接,还是常量
      String str5 = “hello” + str2;//常量与变量拼接,结果在堆中
      String str6 = str1 + str2;//变量与变量拼接,结果也在堆中
      System.out.println("str3 == str4 " + (str3 == str4));//true
      System.out.println("str3 == str5 " + (str3 == str5));//false
      System.out.println("str3 == str6 " + (str3 == str6));//false
      final String str7 = “hello”;
      final String str8 = “java”;
      String str9 = str7 + str8;//常量与常量拼接
      System.out.println("str3 == str9 " + (str3 == str9));//true
      String str10 = (str1 + str2).intern();//intern()的结果放常量池
      System.out.println(str3 == str10);//true
      }

常用的方法

  • 1、基本方法
    • (1)int length()
      • 返回字符串的长度,即字符的个数
    • (2)字符串的比较
      • boolean equals(String other)
        • this和other进行内容比较
        • 对Object的equals进行重写
        • 严格区分大小写
      • boolean equalsIgnoreCase(String anotherString)
        • this和anotherString进行内容比较
        • 不区分大小写
      • 自然排序
        • public int compareTo(String anotherString)
          • 如果是ASCII范围内,按照ASCII值的顺序
      • 定制排序
        • java.text.Collator
          String str3 = “中国”;//Z
          String str4 = “美国”;//M
          //如果想要按照字典顺序
          //找定制排序,实现了java.util.Comparator接口,重写int compare(String s1,String s2)
          //java.text.Collator
          Collator c = Collator.getInstance();
          int result = c.compare(str3, str4);
          System.out.println(result);//中 > 美
    • (3)去掉前后空格
      • String trim()
    • (4)转大小写
      • String toUpperCase()
      • public String toLowerCase()
    • (5)是否是空字符串
      • 方式一
        • “”.equals(字符串)
      • 方式二
        • isEmpty()
  • 2、和字节相关
    • 编码:把字符串转成字节数组
      • byte[] getBytes()
        • 平台默认编码方式进行编码
      • byte[] getBytes(字符编码方式)
        • 按照指定的编码方式
    • 解码:把字节数组转成字符串
      • new String(byte[])
      • new String(byte[],int offset, int length)
      • new String(byte[], 字符解码方式)
    • 乱码
      • (1)编码方式与解码方式不一致
      • (2)缺字节
  • 3、和字符相关
    • 把字符串转字符数组
      • char[] toCharArray()
    • 把字符数组转字符串
      • new String(char[])
      • new String(char[],int offset, int count )
    • 取指定位置的字符
      • char charAt(index)
  • 4、是否以xx开头和结尾
    • boolean startsWith(xx)
    • boolean endsWith(xx)
  • 5、字符串截取
    • String subString(int start)
      • 从[start,最后]
    • String subString(int start, int end)
      • 从[start,end)
  • 6、拆分
    • String[] split(支持正则)
  • 7、查找
    • 是否包含
      • boolean contains(子串)
    • 查找索引位置
      • int indexOf(xxx)
        • 如果存在返回索引
        • 如果不存在返回-1
      • int lastIndexOf(xx)
  • 8、替换
    • String replace(目标子串, 新子串)
    • String replaceAll(目标子串, 新子串)
      • 支持正则
    • String replaceFirst(目标子串, 新子串)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值