String
一、特点
- 字符串是一个特殊的对象。
- 字符串一旦初始化就不可被改变。
问:String str = "abc" 和 String str1 = new String("abc") 有什么区别?
new出来的对象在堆内存中,产生两个对象但都在堆内存中;
直接赋值对象在字符串常量池中,由String类来维护,可以被共享。
equals方法:就是比较两个字符串是否一样
二、构造函数
1.String()
String s = new String(); 等效于 String s = "";但不等效于String s = null;
2.String(byte[] bytes)
将一个字节数组变成字符串,但转换成了ASCII码。
3.String(char[] chars)
将一个字符数组转换成字符串。
或者采用String(char[] chars, int offset, int length)//其中offset为偏移量,length字符串长度。
三、方法
按照面向对象的思想对字符串进行功能分类。
1.获取
1.1.获取字符串长度.length(),
1.2.char charAt(int index),
1.3.int indexOf(char ch)第一次出现字符处的索引。
1.4.int indexOf(char ch, int fromIndex) 从指定位置进行ch的查找第一次出现的索引
类似的还有搜索String字符串,以及lastIndexOf方法从后往前找
1.5.String substring(int beginIndex, int endIndex)获取从哪到哪(endIndex-1)的子字符串。、
2.转换
2.1.将字符串变成字符串数组(字符串的切割)
String[] split(String regex):涉及到正则表达式.
简单来说,","可以切,“.”不能切,得转换成"\\."切。
2.2.将字符串变成字符数组。
char[] toCharArray();
2.3.将字符串变成字节数组。
byte[] getBytes();
2.4.将字符串中的字母转成大小写。
String toUpperCase();大写
String toLowerCase();小写
2.5.将字符串中的内容进行替换
String replace(char oldch,char newch);
String replace(String s1,String s2);
2.6.将字符串两端的空格去除。
String trim();
2.7.将字符串进行连接 。
String concat(string);
3.判断
3.1.两个字符串内容是否相同啊?
boolean equals(Object obj);
boolean equalsIgnoreCase(string str);忽略大写比较字符串内容。
3.2.字符串中是否包含指定字符串?
boolean contains(string str);
3.3.字符串是否以指定字符串开头。是否以指定字符串结尾。
boolean startsWith(string);
boolean endsWith(string);
3.4.比较,按字典顺序比较两个字符串。
int compareTo(String str);//返回第一个不相同字符的Unicode差值
4.其他
String intern();
StringBuffer
一、概述
StringBuffer是字符串缓冲区。用于存储数据的容器。
1.特点:
- 长度不可变。
- 可以存储不同的数据类型。
二、功能
1.添加:
1.1.append
StringBuffer append(data);//data基本是任意数据类型
使用:
StringBuffer sb = new StringBuffer();
StringBuffrt s1 = sb.append(4);
System.out.println(sb);
System.out.println(s1);
System.out.println(sb==s1);
输出:
4
4
true
1.2.insert
StringBuffer insert(int offset, Data data);
使用:
StringBuffer sb = new StringBuffer();
sb.append(123);
sb.insert(1, "haha");
System.out.println(sb);
输出:
1haha23
2.删除
StringBuffer delete(int start, int end);包含头不包含尾
StringBuffer deleteCharAt(int index);删除指定位置元素
清空缓冲区:
sb.delete(0, sb.length());
3.查找
char charAt(int index);
int indexOf(String str);
int lastIndexOf(String str);
4.修改
StringBuffer replace(int begin, int end, String str);//包含头不包含尾
void setCharAt(int index, char ch);
5.其他
5.1.setLength()
void setLength(int length);
使用:
StringBuffer sb = new StringBuffer("asd");
sb.setLength(2);
输出:
as
5.2.reverse()反转
StringBuilder
与StringBuffer一毛一样,但不保证同步。从1.5开始使用。由于一模一样,所以在一般情况下尽量使用StringBuilder以使速度更快。
那么StringBuffer和StringBuilder的安全性体现在哪里呢?
在读写操作上加了锁。
jdk一般升级趋势:
- 简化书写;
- 提高效率;
- 增加安全性。