// 第 4 周 – Java 中的字符串基础
// 运行：java StringBasics.java
import java.util.Arrays;

public class StringBasics {
    public static void main(String[] args) {
        String s = "Hello, World";

        // 长度和按下标取字符 – O(1)
        System.out.println("length = " + s.length() + ", charAt(4) = " + s.charAt(4));

        // String 是不可变的：“修改”方法返回一个新字符串
        String upper = s.toUpperCase();
        System.out.println("s = " + s + ", upper = " + upper);

        // 比较：== 比较引用，equals 比较内容！
        String a = "data";
        String b = "data";                 // 相同的字面量 -> 来自字符串常量池
        String c = new String("data");     // 一个新对象
        System.out.println("a == b: " + (a == b) + ", a == c: " + (a == c) + ", a.equals(c): " + a.equals(c));

        // 字典序比较：负数 / 0 / 正数
        System.out.println("\"apple\".compareTo(\"banana\") = " + "apple".compareTo("banana"));
        System.out.println("\"Zebra\".compareTo(\"apple\") = " + "Zebra".compareTo("apple") + "  (upper case < lower case!)");
        System.out.println("equalsIgnoreCase: " + "Java".equalsIgnoreCase("JAVA"));

        // 查找
        System.out.println("indexOf(\"o\") = " + s.indexOf("o") + ", lastIndexOf(\"o\") = " + s.lastIndexOf("o")
                + ", contains(\"World\") = " + s.contains("World"));

        // 子串：[start, end) – 不包含结束下标
        System.out.println("substring(7) = " + s.substring(7) + ", substring(0, 5) = " + s.substring(0, 5));

        // 分割与连接
        String csv = "Wuhan,Beijing,Shanghai";
        String[] parts = csv.split(",");
        System.out.println("split: " + Arrays.toString(parts));
        System.out.println("join:  " + String.join(" | ", parts));

        // 替换、去除首尾空格
        System.out.println("replace: " + s.replace("World", "Hubei"));
        System.out.println("trim: [" + "   text   ".trim() + "]");

        // 字符串与字符数组之间的转换
        char[] chars = s.toCharArray();
        Arrays.sort(chars);
        System.out.println("sorted characters: " + new String(chars).trim());

        // 数字 <-> 字符串
        int n = Integer.parseInt("42");
        String t = String.valueOf(3.14);
        System.out.println("parseInt + 1 = " + (n + 1) + ", valueOf = " + t);
    }
}
