public class Test{ public static void main(String[] args) { System.out.println("I am testing"); //how to use substring api String s = "abcde"; System.out.println(s.substring(1,2)); //join System.out.println(String.join("/", "a", "b", "c")); // how to change a string // 共享带来的高效要胜过提取,拼接带来的低效,前者多,后者少 // 字符串存放在堆中,自动垃圾回收 String s_changed = s.substring(1,2) + "e"; System.out.println(s_changed); // 字符串是否相等 System.out.println(s_changed.equals("be")); // 忽略case System.out.println(s_changed.equalsIgnoreCase("BE")); // == 用于检测是否指向同一个引用位置 // 不推荐用 == 比较字符串是否相等,因为不同引用位置也可能有相等的字符串 // 比如,+ 或者 substring 产生的字符串不是共享的 //长度为0的字符串的检测 String s_length_0 = ""; System.out.println(s_length_0.equals("")); // 检测字符串是否为null String s_null = null; System.out.println(s_null == null); // 检测字符串既不是null也不为空串 // 下面的顺序不能颠倒,在null上调用方法,会产生错误 if(s_null != null && s_null.length() != 0) { System.out.println("valid!"); } // 获取某个idx下的字符 char first = s_changed.charAt(0); System.out.println(first); // 获取字符数组 char[] strs = s_changed.toCharArray(); for(char ss: strs) { System.out.println(ss); } // 字符串比较 System.out.println("valid!".compareTo("v")); // start with and end with String hello = "hello"; System.out.println(hello.startsWith("he")); System.out.println(hello.endsWith("loo")); // first index of and last index of System.out.println(hello.indexOf("h")); System.out.println(hello.lastIndexOf("l")); // replace System.out.println(hello.replace("l", "M")); // change case System.out.println(hello.toUpperCase()); String s2trim = " tttmmm "; System.out.println(s2trim.trim()); // 小字符串频繁拼接开销较大,每次拼接都会产生新的字符串,使用StringBuilder避免这个问题 StringBuilder bd = new StringBuilder(); bd.append(hello); bd.append('w'); // char can also be added // convert bd to string String bd_str = bd.toString(); System.out.println(bd_str); // get length System.out.println(bd.length()); // change a char at index bd.setCharAt(0, 'P'); System.out.println(bd); // insert a char bd.insert(0, 'X'); System.out.println(bd); // delete char at index bd.deleteCharAt(2); System.out.println(bd); // sbd 效率较高,线程不安全 // sbf 效率较低,线程安全 } }