String类

1.字符串的构造

public static void main(String[] args) {
        String s1=new String("abcd");
        String s2=new String("abcd");
        System.out.println(s1==s2);
}
\\输出false

虽然看起来s1和s2中储存的字符串是一样的,但是他们两个并不相等。

因为字符串的构造的方式和其他的方式不用,String是引用类型,内部储存的不是字符串本身:
在这里插入图片描述

2. String对象的比较

2.1 ==的比较
 public static void main(String[] args) {
     //在基本类型的变量中==比较的是储存的值
        int a=10;
        int b=10;
        System.out.println(a==b);
     //在引用类型的变量中==比较的是引用的是否为同一个对象
        String s1=new String("abcd");
        String s2=new String("abcd");
        System.out.println(s1==s2);
  }
  • String用==并不能比较其中的字符串,也可以理解为比较的是地址
2.2 是否相等:equals方法

equals是Object中的方法,而在String中重写了父类Object的equals,返回值是boolean。

public static void main(String[] args) {
        String s1=new String("abcd");
        String s2=new String("abcd");
    //输出false
        System.out.println(s1==s2);
    //输出true
        System.out.println(s1.equals(s2));
}
2.3 比较大小:compareTo
  1. compareTo方法

    public static void main(String[] args) {
            String s1=new String("abcd");
            String s2=new String("Abcd");
            String s3=new String("abcd");
            String s4=new String("abcdefg");
        //挨个比较,遇到不同的字符,输出字符差,输出32
            System.out.println(s1.compareTo(s2));
        //全部相同的,输出0
            System.out.println(s1.compareTo(s3));
        //把一个字符串比较完全部相同的话,输出长度差,输出-3
            System.out.println(s1.compareTo(s4));
    
        }
    
    1. compareToIgnoreCase 方法

      和上面的compareTo的方法唯一不同的就是忽略大小

      public static void main(String[] args) {
              String s1=new String("abcd");
              String s2=new String("Abcd");
              String s3=new String("abcd");
              String s4=new String("abcdefg");
          //挨个比较,遇到不同的字符,输出字符差,
          //忽略大小,输出0
              System.out.println(s1.compareTo(s2));
          //全部相同的,输出0
              System.out.println(s1.compareTo(s3));
          //把一个字符串比较完全部相同的话,输出长度差,输出-3
              System.out.println(s1.compareTo(s4));
      }
      
2.4 字符串的查找
  1. 返回字符串一个位置的字符:charAt

    //返回类型  方法名称  参数
    //char     charAt(int i)
    //返回在i位置的字符
    public static void main(String[] args) {
            String s=new String("abcdefg");
        //输出c
            System.out.println(s.charAt(2));
    }
    
    • 如果越界抛出异常
  2. 查找出现的位置:indexOf

    //返回类型  方法名称  参数
    //int      indexOf(    )
    
    public static void main(String[] args) {
        String s=new String("abcdefg");
        //1.int indexOf(int ch)
        //查找ch第一次出现的位置,没有的话,返回-1
        int ret1=s.indexOf('c')System.out.println(ret1);//输出2
        
        //2.int indexOf(int ch,int fromIndex)
        //从fromIndex位置查找,第一次出现ch的位置
        int ret2=s.indexOf('c',1);
        System.out.println(ret2);//输出2
        
        //3.int indexOf(String str)
        //返回str第一次出现的位置,没有返回-1
        String str="cde"int ret3=s.indexOf(str);
        System.out.println(ret3);//输出2
        
        //4.int indexOf(String str, intfromIndex)
        //从fromIndex位置查找,第一次出现字符串str的位置
        String str1="cde"int ret4=s.indexOf(str1,1);
        System.out.println(ret4);//输出2
    }
    

    【注意】:lastIndexOf和indexOf区别是:方向相反,是从后边开始查找,参数和indexOf一样。

2.5 大小转化

变大写:toUpperCase()

变小写:toLowerCase()

//返回类型  变量.方法名称        
//String   str.toLowerCase()
public static void main(String[] args) {
        String str="asdfADS";
    //大写转小写
        System.out.println(str.toLowerCase());
    //小写转大写
        System.out.println(str.toUpperCase());

}
2.6 字符串转数组:toCharArray
//返回类型  变量.方法名称  
//String   str.toCharArray
public static void main(String[] args) {
        String str="sadsa";
        char []chars=str.toCharArray();
        System.out.println(Arrays.toString(chars));
        //输出[s, a, d, s, a]
}
2.7 字符串替换:replace
  1. 替换所有的:replaceAll

  2. 替换一个:replaceFirst

    //返回类型  方法名称     参数
    //String   replaceAll(char old,char new)
    //String   replaceFirst(char old,char new)
    public static void main(String[] args) {
            String str="dsafsadsaf";
            String str1=str.replaceAll("a","c");
            String str2=str.replaceFirst("a","z");
            System.out.println(str1);
        //输出dscfscdscf
            System.out.println(str2);
        //输出dszfsadsaf
        }
    
    
2.8 拆分字符串:spilt
//返回类型  方法名称 参数
//String[]  split(String str )   
public static void main(String[] args) {
        String str="dsa dsa dsa dsa";
    //以空格来区分
        String []strings =str.split(" ");
        System.out.println(Arrays.toString(strings));
    //输出[dsa, dsa, dsa, dsa]
    }
2.9 字符串的截取: substring
//返回类型  方法名称 参数
//String    substring(int begin)
//String    substring(int begin,int end)
public static void main(String[] args) {
        String str="dsa dsa dsa dsa";
        String str1=str.substring(4);
        String str2=str.substring(4,6);
        System.out.println(str1);
    //输出dsa dsa dsa
        System.out.println(str2);
    //输出ds
}

【注意】第二种截取中,采取左闭右开的方式

3. 字符串常量池

3.1 发现字符串常量池
public static void main(String[] args) {
        String s1 = "asd";
        String s2 = "asd";
        String s3 = new String("asd");
        String s4 = new String("asd");
        System.out.println(s1 == s2);
    //输出:ture
        System.out.println(s1 == s3);
    //输出:false
        System.out.println(s3 == s4);
    //输出:false
}

在以上代码中发现储存的值一样,但是有些相等有些不等

3.2 String对象的创建
  1. 直接使用字符串赋值的变量是相等的(上面的s1和s2)

    所以也变相的说明两个字符串储存的位置是一样的,在字符串常量池中,不存在新的字符串,就在常量池创建一个,而接下来创建新的相同的字符串,会直接使用常量池中赋值。

  2. 通过new创建String类对象(上面的s1和s3、s3和s4)

    new创建的对象都是新开辟了一段空间,存储数据,不储存在字符串常量池中,所以new的对象是唯一的,

  3. intern方法

    intern方法将创建的String对象添加到常量池中

    public static void main(String[] args) {
            char[] chars={'a','b','c'};
            String string1=new String(chars);
            string1.intern();
            String string2="abc";
            System.out.println(string2 == string1);
        //输出true
    }
    

4. StringBuilder和StringBuffer

4.1 为什么有StringBuilder和StringBuffer

在String字符串上述的操作中,都会new一个新的对象,在进行多次这样的操作,效率就会特别的低,所以就有修改的

4.2 StringBuilder和StringBuffer修改是在原有的基础上修改的
public static void main(String[] args) {
        StringBuffer sb=new StringBuffer("abc");
        sb.replace(0,2,"x");
        //String string =sb;
        //返回类型是StringBuffer
        String string= sb.toString();
        System.out.println(sb);
    //输出xc

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值