认识String类

1. 创建字符串

String string = "hello bit";                //放在常量池里
String string2 = new String("hello bit");   //放在堆里
char[] array = {'h', 'e', 'l', 'l','o'};
String string3 = new String(array);

2. 字符串比较相等

System.out.println(string.equals("hello"));  //当string为null时,会出现空指针异常
System.out.println("hello".equals(string));

3. 字符串常量池

string.intern(); // 手动将String对象加入到字符串常量池中

    面试题:请解释String类中两种对象实例化的区别:

  • 直接复制:只会开辟一块堆的内初空间,并且该字符串对象可以自动保存在对象池中以供下次使用。
  • 构造方法:会开辟两块内存空间,其中一块成为垃圾空间,不会自动保存在对象池中,可以使用intern()方法手工入池。

4. 理解字符串不可变

+= 之后 str 打印的结果却是变了,但是不是 String 对象本身发生改变,而是 str 引用到了其他的对象。即只是修改当前引用所存的地址,并没有修改地址对应内存的内容。
 
常见办法 : 借助原字符串, 创建新的字符串
String str = "Hello"; 
str = "h" + str.substring(1); 
System.out.println(str); 
// 执行结果 hello

5. 字符,字节与字符串

5.1 字符与字符串

No

方法名称

类型

描述

1

public String (char value[])

构造

将字符数组中的所有内容变为字符串

2

public String (char value[],int offset,int count)

构造

将部分字符数组中的内容变为字符串

3

public char charAt(int index)

普通

取得指定位置的索引字符,索引从0开始

4

public char[] toCharArray()

普通

将字符窜变为字符数组返回

5.2 字节与字符串
 

No

方法名称

类型

描述

1

public String(byte bytes[])

构造

将字节数组变为字符串

2

public String(byte bytes[],int offset,int length)

构造

将部分字节数组中的内容变为字符串

3

public byte[] getBytes()

普通

将字符串以字节数组的形式返回

4

public byte[] getBytes(String charsetName)throws UnsupportedEncodingException

普通

编码转换处理

5.3 小结

那么何时使用 byte[], 何时使用 char[] 呢?

byte[] 是把 String 按照一个字节一个字节的方式处理,这种适合在网络传输,数据存储这样的场景下使用,更适合针对二进制数据来操作。

char[] 是把 String 按照一个字符一个字符的方式处理,更适合针对文本数据来操作,尤其是包含中文的时候。

6. 字符串常见操作

6.1 字符串比较

6.2 字符串查找

6.3 字符串替换

6.4 字符串拆分

String str = "192\\168\\1\\1" ;
String[] result = str2.split("\\\\") ;
for(String s: result) {
    System.out.println(s);
}
//  192 168 1 1

String str2 = "name=zhangsan&age=18";
String[] result2 = str2.split("&");
for (int i = 0; i < result2.length; i++) {
     String[] temp = result2[i].split("=");
     System.out.println(temp[0]+" = "+temp[1]);
}   
//  name = zhangsan        age = 18
注意事项 :
1. 字符 "|","*","+" 都得加上转义字符,前面加上 "\".
2. 而如果是 "" ,那么就得写成 "\\".
3. 如果一个字符串中有多个分隔符,可以用 "|" 作为连字符 .
 

6.5 字符串截取

注意事项 :
1. 索引从 0 开始
2. 注意前闭后开区间的写法 , substring(0, 5) 表示包含 0 号下标的字符 , 不包含 5 号下标
 

6.6 其他操作方法

7. StringBuffer 和 StringBuilder

注意:StringStringBuffer类不能直接转换。如果要想互相转换,可以采用如下原则:

  • String变为StringBuffer:利用StringBuffer的构造方法或append()方法。
  • StringBuffer变为String:调用toString()方法。
//字符串反转
public synchronized StringBuffer reverse()

//删除指定范围内的数据(不包含最后的end位)
public synchronized StringBuffer delete(int start, int end) 

//插入数据
public synchronized StringBuffer insert(int offset, 各种数据类型 b) 
面试题:请解释 String StringBuffer StringBuilder 的区别 :
  • String的内容不可修改,StringBufferStringBuilder的内容可以修改
  • StringBufferStringBuilder大部分功能是相似的
  • StringBuffer采用同步处理,属于线程安全操作;而StringBuilder采用异步处理,属于线程不安全操作
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值