黄阶低级 - 《 Java 核心》- 3.6 字符串 - 修改0次

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
发布了41 篇原创文章 · 获赞 2 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章