重拾Java第四篇-String类
- String类,即为字符串,日常开发中非常常用,我们这篇来学习字符串的处理
-
不可变String
- String类其实是一个final类,就是说它是不可以被继承的~
- 怎样才是不可变呢?当String和另外一个String进行拼接时,结果字符串不是原先的字符串对象而是重新创建的~
-
字符串新建
- 字面量,直接双引号将字符串括起来,这种创建方式叫字面量
String str = "Wally";
- new的方式,使用new关键字创建字符串对象
String str = new String("Wally");
-
他们的区别?
- 字面量的方式,对象是创建在字符串常量池的,所以它是复用的,当多个字符串对象的内容是一致时,对象的地址是一个。
- 而new方式创建的字符串对象是创建在堆内存的,每次的new都是一个新的对象,不会复用
-
字符串操作
-
字符串拼接
- +号进行拼接
//结果为:loveyou String result = "love" + "you";
- 使用String类的concat()方法
//结果为:loveyou String result = "love".concat("you");
- 字符串查找
判断是否包含指定前缀
String str = "love you"; str.startsWith("love");
- 判断是否包含指定后缀
String str = "love you"; str.endsWith("you");
- 判断是否包含指定字符串
String str = "love you"; str.contains("y");
- 获取字符串长度
String str = "love you"; str.length();
- 查找字符串在字符串中的位置
- 从前面向后面开始查找
String str = "love you"; str.indexOf("y");
- 从后面向前开始查找
String str = "love you"; str.lastIndexOf("y");
- 字符串替换
- 单个替换(多个只替换一次)
String str = "love you"; str.replace("love", "very love");
- 全部替换,多个出现都会替换掉
String str = "love you, i love you"; str.replaceAll("love", "very love");
- 字符串截取
String str = "love you, i love you"; //指定开始角标和结束角标进行截取,从一个字截取到第三个字 //结果为:e you,i love you String result = str.substring(0, 2);
-
可变字符串(不是继承于String喔)
-
当需要大量字符串要拼接时,由于String的不可变性,每次拼接都会重新创建一个String对象进行返回,但每次对象的创建都需要耗费内存空间,由此可见直接使用+号和concat()进行拼接是比较耗费内存的
- 解决方案
- StringBuilder
- StringBuffer
- 解决方案
- StringBuilder,最常用的可变字符串类
- StringBuffer,其实就是StringBuilder的多线程加锁版本,在多线程操作时则需要使用StringBuffer。平时单线程操作字符串使用StringBuilder即可,因为没有了加锁操作,会减少不必要的加锁性能消耗
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 15; i++) {
//使用append方法进行拼接字符串
builder.append("love: ");
builder.append(i);
}
//最后toString输出最终结果s
String result = builder.toString();
- 清空所有已拼接的字符串,当拼接很频繁时,频繁创建StringBuilder对象也不合理,我们可以使用delete方法,清空掉所有已拼接的字符来复用StringBuilder对象
builder.delete(0, builder.length());
网友评论