1、字符串
Java 字符串就是 Unicode 字符序列
Java 没有内置的字符串类型,所以在标准 Java 类库中提供了一个预定义类,叫做 String。
每个用双引号括起来的字符串都是 String 类的一个实例:
String e = "";//an empty string
String greeting = "Hello";
2、子串
- 可以使用 substring 方法,两个参数分别是起始位置,包前不包后。
String greeting = "Hello";
String s = greeting.substring(0, 3);
System.out.println(s);// 输出Hel,子串长度为 3-0=3
- 使用 substring 的一个优点,容易计算子串的长度。
3、拼接
- Java 语言可以使用 + 号进行字符串拼接,但有更好的方式,后续再讨论。
4、不可变字符串
坑:String类没有提供用于修改字符串的方法!
- 所以想将字符串 “Hello” 修改为 “Help” ,要这样写:
String greeting = "Hello";
greeting = greeting.substring(0, 3) + "p";
System.out.println(greeting);// 输出Help
- 不可变字符串的优点:编译器可以让字符串共享,如果复制一个字符串变量,原始字符串与复制的字符串共享相同的字符。
- Java 的设计者认为共享带来的高效率远远胜过提取、拼接字符串所带来的低效率。
String greeting = "Hello";
//有人将 Java 字符串看做是字符串数组,像下面这样:
char greeting[] = "hello";
//这种认识是错误的,其实 Java 字符串更加像 char* 指针:
char* greeting = "hello";
//当采用另一个字符串替换 greeting 的时候, Java 代码主要进行下列操作:
char* temp = malloc(6);
strncpy(temp,greeting,3);
strncpy(temp + 3,"p!",3);
5、字符串相等
判断是否是本身使用 == ,判断是否相等使用 equals
- s.equals(t) , s 和 t 可以是字符串变量,也可以是字符串常量
String greeting = "Hello";
System.out.println("Hello".equals(greeting));// true
System.out.println("hello".equalsIgnoreCase(greeting));// true,忽略大小写差别
- 工作中不要使用 == 运算符检测字符串的相等性,以免程序中出现糟糕的 bug ,从表面上看,这种 bug 很像随机产生的间歇性错误。
- C++ 的 string 类重载了 == 运算符,但 Java 并没有这么做。
6、空串和 Null 串
- null 串表示目前没有任何对象与该变量关联
- 空串是一个 Java 对象,有自己的串长度(0)和内容(空)
- 要检查一个字符串既不是 null 串也不是空串:
if(str != null && str.length() != 0)//检查一个字符串既不是 null 串也不是空串
- 而且检查 null 要放在前面,因为在 null 值上调用方法会出现问题。
7、构建字符串
- 有时需要由较短的字符串构建字符串,例如按键或者来自文件中的单词,使用 StringBuilder 或者 StringBuffer 可以提高效率。
StringBuilder builder = new StringBuilder();
builder.append('a'); // 添加单一字符
builder.append("bcd"); // 添加字符串
String completedString = builder.toString(); // 构建字符串
System.out.println(completedString);// 输出 abcd