String
· 字符串是一种特殊的对象
内存中有个常量池,常量池中存放字符a,b,c…
· 字符串是常量,一旦初始化就不可能被改变
· 字符串定义:
String str1=“sd”
String str2 = new String(“sda”)
区别:str1在内存中有一个对象;str2在内存中有两个对象
· String类指定是final的,没有子类
· s1和s2的区别:
String s1 =“asd”;
String s2 = new String(“asd”);
String s3 = “asd”;
s1== s2 false; 比较的是内存地址
s1.equals(s2) true ; 比较的是值
s1==s3 true "asd“定义完 放到常量池中
常见操作-获取
· int length() 获取字符串长度
获取字符串的长度是通过length()方法完成的。数组也有获取长度的方法,但是是数组的属性list.length;
· char charAt(int index) 获取指定位置上的字符;超出字符串长度会抛出StringIndexOutOfBoundsException;
· int indexOf(int char ) 获取指定字符在字符串中的第一次出现的位置;没有则返回-1
· int indexOf(int char, int fromIndex ) 从指定位置开始获取指定字符在字符串中的第一次出现的位置;
· int indexOf(String str ) 获取指定字符串在字符串中的第一次出现的位置;
· int indexOf(String str, int fromIndex ) 从指定位置开始获取指定字符串在字符串中的第一次出现的位置;
· int lastIndexOf(int char) 返回指定字符在字符串中最后一次出现的位置;
· String subString(beginIndex) 获取字符串中的一部分
String subString(beginIndex, endIndex) 包含头不包含尾;如果角标不存在会抛出StringIndexOutOfBoundsException;
常见操作-判断
· boolean contains(CharSequence F) 是否包含某个字符
· boolean isEmpty() 是否有内容,当且仅当length为0时返回true;
null时会报空指针异常,常用StringUtils.isBlank()判断是否有内容
· boolean startsWith(String str) 是否以指定的内容开头
· boolean endsWith(String str) 是否以指定的内容结尾
· boolean equals(String str) 判断字符串内容是否相同
· boolean equalsIgnoreCase(String str) 判断字符串内容是否相同 并忽视大小写
常见操作-转换
· 构造方法 String(char[] value) 将字符数组转成字符串
静态方法 static String copyValueOf(char[] value);
静态方法 static String valueOf(char[] value);
· char[] toCharArray() 将字符串转成字符数组
· 构造方法 String(byte[] value) 将字节数组转成字符串
静态方法 static String copyValueOf(byte[] value);
静态方法 static String valueOf(byte[] value);
· byte[] getBytes() 将字符串转成字节数组
· static String valueOf(int) 将基本数据类型转成字符串
static String valueOf(double)
static String valueOf(boolean)
字符串和字节数组在转换过程中可以指定编码表
· static String toUpperCase() 转成大写
· static String toLowerCase() 转成小写
常见操作-替换
替换会生成新的字符串
String replace(char oldChar, char newChar)
String replace(CharSequence oldStr, CharSequence newStr)
String replaceAll(String regex, String replaceStr)
String replaceFist(String regex, String replaceStr)
常见操作-切割
String[] split(String regex);
常见操作-比较
int compareTo(Str);
常见操作-去除空格
String trim()
StringBuffer
· 字符串缓存区,是一个容器
· 字符串的组成原理就是通过该类实现的
· 可以对字符串内容进行增删
· 是可变长度的,可添加多种数据类型
数组也是容器,但是长度不可变,且只能添加一种数据类型
StringBuffer-添加
· append() 存储,将添加参数存储到已有参数的结尾处
insert()在指定位置插入
· 通过toString() 转换为字符串类型
StringBuffer-删除
delete(start, end)包含头不包含尾
清空缓存区-delete(0, .length());
StringBuffer-获取
· char charAt(int index) 获取指定位置上的字符;超出字符串长度会抛出StringIndexOutOfBoundsException;
· void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin); 将缓存区中指定数据存储到指定的字符数组中。包含头不包含尾
StringBuffer-修改
· void setCharAt(int index, String str) 把index位置上的值替换成str
· StringBuffer reverse() 反转
StringBuilder
StringBuffer 和 StringBuilder 的区别
StringBuffer 和 StringBuilder 的 3 个区别
StringBuffer是线程安全的可变字符串序列,StringBuilder线程不同步
单线程建议用StringBuilder,多线程用StringBuffer