Java 里的字符串(String、StringBuffer、StringBuilder)

创建字符串

Java 里的字符串和 C 语言里的字符串不太一样,C 语言里的字符串是由 ‘\0’ 结尾的字符数组或者用指针来表示,而在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。

创建字符串很简单,可以使用最简洁的方式:

String s1 = "Hello";

也可以使用构造函数来构造:

String s2 = new String("World");

还可以用字符数组进行构造:

char[] arr = {'J', 'A', 'V', 'A'};
String s3=new String(arr);

以上是 Java 中三种最常见构造字符串的方法。

String 常见方法

字符串的长度

使用 length() 方法可以求出字符串的长度:

length方法


可以使用 isEmpty() 方法判断字符串的长度是否为0,是返回 true,否则返回 false。

isEmpty

字符串比较

在使用 == 比较基本类型变量的时候,比较的是两个变量的值是否相等。例如:

int a=10;
int b=10;
int c=20;
System.out.println(a == b);	//true
System.out.println(a == c);	//false

而使用 == 比较引用类型变量的时候,比较的是两个变量是否为一个对象。下面先来看一段代码:

字符串比较

使用语句 String s1 = “hello”; 成功创建字符串后,那么在常量池中就会存在 hello 这个字符串,所以后面的语句 String s2 = “hello”; 就会去常量池中看看有没有这个字符串,s1 和 s2 就会共用一个字符串,所以 s1 和 s2 就是相等的。

使用语句 String s3 = new String(“hello”); 则会创建一个对象指向 hello 这个字符串,同样 String s4 = new String(“hello”); 也会新建一个对象,所以 s3 不等于 s4,对于 String s5=s4; s5 和 s4 就会引用同一个对象,所以 s5 和 s4 就是相等的。

创建字符串

equals() 方法

通过上面的代码可以看出,尽管 s1 到 s5 的内容都是 hello,但是使用 == 比较的时候并不相等。但按照我们的逻辑,就是看它们的内容相不相等,所以我们比较字符串的时候,应该使用 equals() 方法。只要它们的内容相等,哪怕不是同一个对象,也会返回 true。

equals方法

compareTo() 方法

和 equals 不同,equals 返回的是布尔值,而 compareTo 返回的是 int 型。
compareTo

compareToIgnoreCase() 方法: 忽略大小写比较,其余与 compareTo 比较方式相同。

compareToIgnoreCase( ) 方法


字符串查找

String 类提供了很多查找函数,下面列举一些常用的函数。

char charAt(int index)
返回下标为 index 的字符,如果 index 为负数或者越界,则抛出IndexOutOfBoundsException异常。

charAt函数

int indexOf(int ch)
返回 ch 第一次出现的位置,没有则返回 -1。

indexOf函数

int indexOf(int ch, int fromIndex)
从 fromIndex 位置开始找 ch 第一次出现的位置,没有则返回 -1。

index函数

int indexOf(String str)
返回 str 第一次出现的位置,没有返回 -1。

index函数

int indexOf(String str, int fromIndex)
从 fromIndex 位置开始找 str 第一次出现的位置,没有返回 -1。

index函数

int lastIndexOf(int ch)
从后往前找,返回 ch 第一次出现的位置,没有返回 -1。

lastIndexOf

还有几个函数跟上面的功能大同小异:
int lastIndexOf(int ch, int fromIndex)
从 fromIndex 位置开始找,从后往前找 ch 第一次出现的位置,没有返回 -1。

int lastIndexOf(String str)
从后往前找,返回 str 第一次出现的位置,没有返回 -1。

int lastIndexOf(String str, int fromIndex)
从 fromIndex 位置开始找,从后往前找 str 第一次出现的位置,没有返回 -1。

字符串转化

这里主要分为以下几种转化:数值和字符串转化、大小写转换、字符串转数组和格式化。

数值和字符串转化

  1. 数值转字符串(valueOf

数值和字符串转化
2. 字符串转数字

字符串转数字

大小写转换

只转换字母。
toUpperCase():转大写
toLowerCase():转小写

大小写转化

字符串和数组转换

  1. 字符串转数组:toCharArray()
    字符串转数组
  2. 数组转字符串:
    数组转字符串

格式化

格式化输出

字符串替换

字符串替换

注意: 由于字符串是不可修改的,字符串替换不是修改当前的字符串,而是产生一个新的字符串。

字符串拆分

String[] split(String regex): 将字符串全部拆分。
String[] split(String regex, int limit): 将字符串以指定的格式,拆分为 limit 组。

字符串拆分

如果有多个分隔符,可以使用 " | " 作为连字符。

可使用 | 作为连字符

如果要将一些特殊的字符作为分隔符的话,需要使用转义字符。
注意: 字符 |*+ 都要加上转义字符,前面加上 \。如果是 \,就需要加上 \\

转义字符

字符串截取

从一个完整的字符串之中截取出部分内容。
String substring(int beginIndex) :从指定索引截取到结尾。
String substring(int beginIndex, int endIndex) : 截取部分内容。
注意:substring 里是前闭后开,包括前面,不包括后面。

字符串截取

去除空格

trim 会去掉字符串开头结尾的空白字符包括空格,换行,制表符。

trim

StringBuilder 和 StringBuffer

字符串是不可修改的,所有的修改其实是创建新的对象。也就是在下面这段代码中,并不会直接把 s 的内容修改成 hello world,而是会生成一个新的对象,再让 s 指向指个对象。

public static void main(String[] args) {
    String s = "hello ";
    s += "world";
    System.out.println(s);
}

String 类是不可修改的,为了修改字符串,java 提供了 StringBuilder 和 StringBuffer 类,使用 append 方法可以在字符串末尾添加字符串。

append

当然,除了 append 方法还有其他方法,可以在下面这个网页中查询:Java 帮助手册(按下 Ctrl + F 键,输入 StringBuilder 即可跳转到 StringBuilder 部分)。

注意: String 和 StringBuilder 不能直接转换,但可以通过以下方式互相转换:
String 转 StringBuilder 可以通过 StringBuilder 的构造方法或者 append 方法。
StringBuilder 转 String 可以通过 toString() 方法。


String、StringBuffer、StringBuilder 三者区别:
String:字符串常量,内容不可修改,StringBuffer 与 StringBuilder 的内容可以修改。
StringBuffer:字符串变量(线程安全)。频繁对字符串内容修改,可以考虑 StringBuffer。
StringBuilder:大部分功能和 StringBuffer 相似,属于线程不安全操作。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值