String类

String类概述

  1. 字符串是常量,创建之后不可改变
  2. 字符串字面值存储在字符串池中,可以共享
public class Demo01 {
    public static void main(String[] args) {
        String name="zhu";//"zhu"常量存储在字符串池中
        name="zhangsan";//"qq"赋值给了name变量,给字符串赋值时,并没有修改数据,而是重新开辟一个空间
        String name2="zhangsan";
    }
}
  1. String s="Hello";产生一个对象,字符串池中存储
  2. String s=new String("Hello");产生两个对象,堆、池各存储一个
//演示字符串的另一种创建方式
String str=new String("java");
String str2=new String("java");
System.out.println(str==str2);//fasle,比较的是地址
System.out.println(str.equals(str2));//true,比较的是数据

常用方法

  1. public int length(); 返回字符串的长度
  2. public char charAt(int index); 根据下标获取字符
  3. public boolean contains(String str); 判断当前字符串中是否包含某个字符串
//字符串方法的使用
String content="李易峰最帅  ";
System.out.println(content.length());//7,一个字符算一个,空格也算一个字符
System.out.println(content.charAt(0));//获取第一个字符
System.out.println(content.charAt(content.length()-1));//获取最后一个字符
System.out.println(content.contains("李"));//true
System.out.println(content.contains("祝"));//false
  1. public char[] toCharArray(); 将字符串转换成数组
  2. public int indexOf(String str); 查找str首次出现的下标,存在,就返回该下标,不存在,则返回-1
  3. public int lastIndexOf(String str); 查找str最后一次出现的下标
System.out.println(Arrays.toString(content.toCharArray()));//[李, 易, 峰, 最, 帅,  ,  , 最, 酷, ,, 最, 好]
System.out.println(content.indexOf("最"));
System.out.println(content.indexOf("最",4));
System.out.println(content.lastIndexOf("最"));
  1. public String trim(); 去掉字符串前后的空格
  2. public String toUpperCase(); 将小写转换为大写
  3. public String toLowerCase(); 将大写转换为小写
  4. public boolean endWith(String str); 判断字符串是否以str结尾
  5. public boolean startWith(String str); 判断字符串是否以str开头
String content2="  hello world   ";
System.out.println(content2.trim());//hello world
System.out.println(content2.toUpperCase());//HELLO WORLD   
System.out.println(content2.toLowerCase());//hello world   
String fileName="hello.java";
System.out.println(fileName.endsWith(".java"));//true
System.out.println(fileName.startsWith("hello"));//true
  1. public String replace(char oldChar,char newChar); 将旧字符串替换成新字符串
  2. public String[] split(String str); 根据str做拆分
System.out.println(content.replace("最帅","最美"));

String say="Java is the best  programing language,java xahid";
String[] arr=say.split("[ ,]+");
System.out.println(arr.length);
for (String string : arr){
    System.out.println(string);
}

System.out.println("================================================");

//补充两个方法equals,compareTo();
String s1="hello";
String s2="HELLO";
//equalsIgnoreCase 忽略大小写的比较
System.out.println(s1.equalsIgnoreCase(s2));//true

String s3="asfg";
String s4="errt";
System.out.println(s3.compareTo(s4));

String s5="asdf";
String s6="asdfrw";
System.out.println(s5.compareTo(s6));//前几位都相等,就用s5的字符长度-s6的字符长度--->4-6

案例演示

需求:

已知String str="this is a text":

  1. 将str中的单词单独获取出来
  2. 将str中的text替换为practice
  3. 在text前插入一个easy
  4. 将每个单词的首字母改为大写
public class Demo02 {
    //案例演示
    public static void main(String[] args) {
        String str="this is a text";

        //1.将str中的单词单独获取出来
        String[] arr=str.split(" ");
        for (String string:arr) {
            System.out.println(string);
        }

        //2.将str中的text替换为practice
        System.out.println(str.replace("text","practice"));

        //3.在text前插入一个easy
        System.out.println(str.replace("text","easy text"));

        //4.将每个单词的首字母改为大写
        for (int i=0;i<arr.length;i++){
            char first=arr[i].charAt(0);
            //把第一个字符转成大写
           char upperfirst =Character.toUpperCase(first);
           String news=upperfirst+arr[i].substring(1);
           System.out.println(news);
        }
    }
}

可变字符串

  1. StringBuffer: 可变长字符串,JDK1.0提供,运行效率慢,线程安全
  2. StringBuilder:可变长字符串,JDK5.0提供,运行效率块,线程不安全
/**
 * StringBuffer和StringBuiider的使用
 * 和String的区别:
 * 1.效率比String高
 * 2.比String节省内存
 */
public class Demo03 {
    public static void main(String[] args) {
         //StringBuffer sb=new StringBuffer();
         StringBuilder sb=new StringBuilder();
         
        //1.append();追加
        sb.append("java");
        System.out.println(sb.toString());//java
        sb.append("真香");
        System.out.println(sb.toString());//java真香
        sb.append("java不错");
        System.out.println(sb.toString());// java真香java不错

        //2.insert();添加
        sb.insert(0,"我是第一");
        System.out.println(sb.toString());//我是第一java真香java不错

        //3.replace();
        sb.replace(0,3,"hello");
        System.out.println(sb.toString());//hello一java真香java不错

        //4.delete();
        sb.delete(0,5);
        System.out.println(sb.toString());//一java真香java不错

        //清空
        sb.delete(0,sb.length());
        System.out.println(sb.toString());
    }

}
/**
 * 验证StringBuilder效率高于String
 */
public class Demo04 {
    public static void main(String[] args) {
        long start=System.currentTimeMillis();
      /*  String string="";
        for (int i=0;i<9999;i++){
            string+=i;
        }
        System.out.println(string);*/
        
        StringBuilder sb=new StringBuilder();
        for (int i=0;i<9999;i++){
            sb.append(i);
        }
        System.out.println(sb.toString());

        long end=System.currentTimeMillis();
        System.out.println("用时:"+(end-start));//String:506秒    StringBuilder:5秒

    }
}