String知识点讲解
2.5字符串替换
String str="abcabcabcabc";
String ret=str.replace('a','p');
System.out.println(ret);
(替换所有老的字符为第2个参数)还可以替换字符串
String str1="abcabcabcabc";
String ret1=str1.replaceFirst("ab","ppp");
System.out.println(ret1);
2.6 字符串拆分
split方法的使用:
指定位置去分割
String str="name=zhagnsan&age=10";
String[] ret=str.split("&");
for (int i = 0; i < ret.length; i++) {
System.out.println(ret[i]);
}
}
limit可以在这里分割3次,指定位置去分割
String str="name = zhagnsan & age = 10";
String[] ret=str.split(" ",3);
for (int i = 0; i < ret.length; i++) {
System.out.println(ret[i]);
}
}
如果limit大于最大分割,虽然不能分割超过,但是他能够保证能分割的最大次数。不够就不分了。
如果分割IP地址
String str="192.168.1.1";
String []ret=str.split("//.");
for (int i = 0; i < ret.length; i++) {
System.out.println(ret[i]);
}
注意事项:
1. 字符"|","*","+"都得加上转义字符,前面加上"\\".
2. 而如果是"\",那么就得写成"\\\\".
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.
2.7 字符串截取
从一个完整的字符串之中截取出部分内容。
运用的是substring方法(左闭右开)
String str="abcdef";
String ret=str.substring(2);
System.out.println(ret);
String str="abcdef";
String ret=str.substring(1,3);
System.out.println(ret);
trim方法:消除左右两边的空格(trim 会去掉字符串开头和结尾的空白字符(空格, 换行, 制表符 等).)
String str2=" a bc de dsdwd ";
System.out.println(str2);
String ret2=str2.trim();
System.out.println(ret2);
2.9 字符串的不可变性
String是一种不可变对象. 字符串中的内容是不可改变。字符串不可被修改,是因为:
1. String类在设计时就是不可改变的,String类实现描述中已经说明了
2. 所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象
为什么 String 要设计成不可变的?(不可变对象的好处是什么?)
1. 方便实现字符串对象池. 如果 String 可变, 那么对象池就需要考虑写时拷贝的问题了.
2. 不可变对象是线程安全的.
3. 不可变对象更方便缓存 hash code, 作为 key 时可以更高效的保存到 HashMap 中.
2.10 字符串修改
注意:尽量避免直接对String类型对象进行修改,因为String类是不能修改的,所有的修改都会创建新对象,效率 非常低下。
public static void main(String[] args) {
String s = "hello";
s += " world";
System.out.println(s); // 输出:hello world
}
但是这种方式不推荐使用,因为其效率非常低,中间创建了好多临时对象。
3. StringBuilder和StringBuffer
由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。
StringBuff append(String str) | 在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、 double、float、int,long、Object、String、StringBuff的变量 |
char charAt(int index) | 获取index位置的字符 |
int length() | 获取字符串的长度 |
int capacity() | 获取底层保存字符串空间总的大小 |
void ensureCapacity(int mininmumCapacity) | 扩容 |
void setCharAt(int index, char ch) | 将index位置的字符设置为ch |
int indexOf(String str) | 返回str第一次出现的位置 |
int indexOf(String str, int fromIndex) | 从fromIndex位置开始查找str第一次出现的位置 |
int lastIndexOf(String str) | 返回最后一次出现str的位置 |
int lastIndexOf(String str, int fromIndex) | 从fromIndex位置开始找str最后一次出现的位置 |
StringBuff insert(int offset, String str) | 在offset位置插入:八种基类类型 & String类型 & Object类型数据 |
StringBuffer deleteCharAt(int index) | 删除index位置字符 |
StringBuffer delete(int start, int end) | 删除[start, end)区间内的字符 |
StringBuffer replace(int start, int end, String str) | 将[start, end)位置的字符替换为str |
String substring(int start) | 从start开始一直到末尾的字符以String的方式返回 |
String substring(int start,int end) | 将[start, end)范围内的字符以String的方式返回 |
StringBuffer reverse() | 反转字符串 |
String toString() | 将所有字符按照String的方式返回 |
StringBuffer reverse()反转字符串:
StringBuilder stringBuilder=new StringBuilder("abcdef");
stringBuilder.reverse();
System.out.println(stringBuilder);