String类与StringBuffer类

1 String类的初始化

1.1 使用字符串常量直接初始化一个String对象

package String;

public class Main{
    public static void main(String[] args) {
        String str1 = null;
        String str2 = "";
        String str3 = "abc";
    }
}

1.2 String构造方法初始化字符串对象

package String;
 
import javax.print.DocFlavor;
import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = new String(); // 创建一个内容为空的字符串
        String str2 = new String("abc"); // 根据指定字符串内容创建对象
        char[] charArry = new char[] {'a', 'b', 'c'};
        String str3 = new String(charArry); // 根据指定字符数组创建对象
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        System.out.println(str1+str2+str3); // 字符串连接
    }
}

2 String类的常见操作

2.1 字符串的基本操作

package String;

public class Main {
    public static void main(String[] args) {
        String s = "abcabcbacdba";
        System.out.println(s.length()); // 获取字符串长度
        System.out.println(s.charAt(0)); // 返回index位置上的字符
        System.out.println(s.indexOf('c')); // 返回此字符在字符串中第一次出现的位置
        System.out.println(s.lastIndexOf('c')); // 返回此字符在字符串中最后一次出现的位置
        System.out.println(s.indexOf("ab")); // 返回子字符串在字符串中第一次出现的位置
        System.out.println(s.lastIndexOf("ab")); // 返回子字符串在字符串中最后一次出现的位置
    }
}

2.2 字符串的转换操作

package String;

public class Main {
    public static void main(String[] args) {
        String str = "java";
        String str1 = "PYTHON";
        char[] charArry = str.toCharArray(); // 字符串转换为字符数组
        for (int i = 0; i < charArry.length; i++) {
            System.out.print(charArry[i]);
            if (i != charArry.length-1) {
                System.out.print(",");
            }
        }
        System.out.println();
        System.out.println(String.valueOf(12)); // int类型转换为String类型
        System.out.println(str.toUpperCase()); // 变大写
        System.out.println(str1.toLowerCase()); // 变小写
    }
}

2.3 字符串的替换和去空格操作

package String;

public class Main {
    public static void main(String[] args) {
        String src = "   http : //www.baidu.com    ";
        System.out.println(src.trim()); // 去掉两端空格
        System.out.println(src.replace(" ", "")); // 将字符串中全部空格替换
    }
}

2.4 字符串的判断操作

package String;

public class Main {
    public static void main(String[] args) {
        String S1 = "starter";
        String s2 = "st";
        System.out.println(S1.startsWith("st")); // 判断字符串是否以字符串st开头
        System.out.println(S1.endsWith("er")); // 判断字符串吗是否以字符串er结尾
        System.out.println(S1.contains("ar")); // 判断字符串是否包含字符串ar
        System.out.println(S1.isEmpty()); // 判断字符串是否为空
        System.out.println(S1.equals(s2)); // 判断两个字符串是否相等
    }
}

package String;

public class Main {
    public static void main(String[] args) {
        String str1 = new String("abc");
        String str2 = new String("abc");
        System.out.println(str1 == str2); // 判断两个字符串对象的地址是否相同
        System.out.println(str1 == "abc"); 
        System.out.println(str1.equals(str2)); // 判断两个字符串是否相等
    }
}

2.5 字符串的截取和分割

package String;

public class Main {
    public static void main(String[] args) {
        String str = "2018-01-24";
        System.out.println(str.substring(5)); // 从第六个字符截取到末尾
        System.out.println(str.substring(5,7)); // 从第六个截取到第七个
        String[] strArry = str.split("-"); // 通过“-”分割字符串为字符串数组
        for (int i = 0; i < strArry.length; i++) {
                System.out.print(strArry[i]);
                if (i != strArry.length-1) {
                    System.out.print(",");
                }
        }
    }
}

注: 访问字符时,索引不存在发生IndexOutOfBoundsException异常

3 StringBuffer类

String类是final类,String定义的字符是一个常量,因此他一旦创建,其内容和长度是不可变的。若对一个字符串进行修改只能创建新的字符串。
StringBuffer类和String类的最大区别在于它的内容和长度是可以改变的。StringBuffer类似一个字符容器,操作的都是这个容器,因此不会产生新的对象。

package String;

import javax.sound.midi.Soundbank;

public class Main {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        sb.append("abc"); // 末尾追加字符
        System.out.println(sb);

        sb.insert(2, "de"); // 指定位置插入字符串
        System.out.println(sb);

        sb.setCharAt(2, 'c'); // 修改指定位置字符
        System.out.println(sb);

        sb.replace(2,5,"xyz"); // 替换指定位置字符串或字符
        System.out.println(sb);

        sb.reverse(); // 翻转字符串
        System.out.println(sb);

        sb.delete(0, 3); // 指定范围删除
        System.out.println(sb);
        
        sb.deleteCharAt(0); // 指定位置删除
        System.out.println(sb);
        
        sb.delete(0, sb.length()); // 清空缓冲区
        System.out.println(sb);
    }
}

注:
1.String类重写了Object累的equal方法,而StringBuffer类没有重写Object类的equals方法。(Object类的equals方法是判断是否为同一对象,与“==”相同)
2.String类对象可以用"+"进行连接,而StringBuffer类的对象则不能。

你可能感兴趣的:(JAVA学习)