Java 技术栈 | 代码起飞 String 类常用方法总结
日常开发中很多,如果我们能熟练的使用各种类库,将大大提高我们的开发效率。因此,日常的积累是很重要的。
所谓的积累,一方面是在用的过程中积累,另一方面是在学的过程中积累。用的过程中积累,主要是把我们用过的都整理出来,以便我们记住,将来使用的过程中更熟、更快;学的过程中积累,主要是把自己之前不知道的、没听过的记录下来,以便以后遇到相应的场景时,能更方便的找到我们想要的类库。
1. 子串
substring 从一个较大的字符串提取出一个子串
String greeting = "Hello";String s = greeting.substring(0, 3);
在 substring 中从 0 开始计数,直到 3 为止,但不包含 3。
子串的长度 s.substring(a, b) 的长度为 b - a
2. 拼接
Java 允许使用 + 号连接(拼接)两个字符串
当一个字符串与一个非字符串的值进行拼接时,后者会转换成字符串
任何一个 Java 对象都可以转换成字符串,这种特性通常用在输出语句中
System.out.println("The answer is " + anwser);
把多个字符串放在一起,用一个界定符分隔,可以使用静态 join 方法
String all = String.join(" / ", "S", "M", "L", "XL");// all is the string "S / M / L / XL"
在 Java 11 中,提供了一个 repeat 方法
String repeated = "Java".repeat(3); // "JavaJavaJava"
3. 不可变字符串
String 类没有提供修改字符串中某个字符的方法
可以提取想要保留的子串,再与希望替换的字符拼接
greeting = greeting.substring(0, 3) + "p!";
由于不能修改 Java 字符串中的单个字符,所以在 Java 文档中将 String 类对象称为是不可变的(immutable)。
可以修改字符串变量 greeting,让它引用另外一个字符串
修改一个代码单元要比从头创建一个新字符串更加简洁。答案是:也对,也不对。的确,通过拼接 “Hel” 和 “p!” 来创建一个新字符串的效率确实不高。但是,不可变字符串却有一个优点:编译器可以让字符串共享。
Java 的设计者认为共享带来的高效率远远胜过于提取子串、拼接字符串所带来的低效率。可以看看你自己的程序,我们发现:大多数情况下都不会修改字符串,而只是需要对字符串进行比较。
4. 检测字符串是否相等
使用 equals 方法检测两个字符串是否相等
s.equals(t);
检测两个字符串是否相等,而不区分大小写,可以使用 equalsIgnoreCase 方法
"Hello".equalsIgnoreCase("hello");
一定不要使用 == 运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否存放在同一个位置上。当然,如果字符串在同一个位置上,他们必然相等。但是,完全有可能将内容相同的多个字符串副本放置在不同的位置上。
String greeting = "Hello";if (greeting == "Hello")// probably trueif (greeting.substring(0, 3) == "Hel")// probably false
如果虚拟机始终将相同的字符串共享,就可以使用 == 运算符检测是否相等。但实际上只有字符串字面量是共享的,而 + 或 substring 等操作得到的字符串并不共享。因此,千万不要使用 == 运算符测试字符串的相等性。
Java 的 compareTo 方法完全类似于 strcmp
if (greeting.compareTo("Hello") == 0)
不过,使用 equals 看起来更为清晰
5. 空串与 Null 串
空串 "" 是长度为 0 的字符串。可以调用以下代码检查一个字符串是否为空:
if (str.length() == 0)
或
if (str.equals(""))
空串是一个 Java 对象,有自己的串长度(0)和内容(空)。不过,String 变量还可以存放一个特殊的值,名为 null,表示目前没有任何对象与该变量关联。要检查一个字符串是否为 null,要使用以下条件
if (str == null)
有时要检查一个字符串既不是 null 也不是空串
if (str != null && str.length() != 0)
首先要检查 str 不为 null,如果在一个 null 值上调用方法,会出现错误。
更多推荐


所有评论(0)