String类
字符串的创建
字符串存放在公共的存储池中,字符串变量指向存储池中相应的位置。如果复制一个字符串变量,原始字符串和复制的字符串共享相同的字符串。Java的设计者认为共享带来的高效率渊源胜过于提取子串、拼接字符串带来的低效率
/*
"123"这个字面常量会存储在方法区中的字符串常量池中,栈中的s1会存储这个字面常量的引用。
若常量池中已有这个字符串,则直接返回这个字符串的引用
*/
String s1 = "123";、
/*
JVM会在常量池中创建一个"abc",在堆创建一个String对象,且会有一个引用类型的变量指向常量池中
的"abc"。
*/
String s2 = new String("abc")
字符串的常用方法
字符串的拼接
String subString(int beginIndex); //返回一个从beginIndex处开始的子字符串
String subString(int beginIndex,int length) //返回一个从beginIndex处开始、长度为length的子字符串
String subString(int beginIndex,int endIndex); //返回一个从beginIndex开始到endIndex - 1处的子字符串
String concat(String str); //返回将两个字符串连接起来的字符串
static String join(CharSequence delimiter, CharSequence... elements); //将多个字符串放在一起,并用一个界定符分隔。
String repeat(int num); //将字符串重复num次
检测字符串是否相等
boolean equals(String str); //判断字符串是否相等,比较的是字符串的内容而不是引用是否相等,千万不要使用==比较字符串是否相等,因为这个运算符只能确定两个字符串是否存放在同一个位置。
boolean equalsIngoreCase(String str); //忽略字母大小进行比较
空串和null串
判空操作可以使用str.isEmpty()或者str.length==0,判断是不是null串直接使用str == null。
boolean isEmpty(); //判空
其他方法
int length(); //返回字符串的长度
char charAt(int index); //返回指定下标处的字符
int indexOf(String str); //返回str在字符串中首次出现的的下标
int lastIndexOf(String str); //返回str在字符串中最后一次出现的的下标
int compareTo(String str); //若字符串与str相等,返回0;大于str,返回1;小于str,返回-1。
-----------------------------------------------------------------------------------------------------------
boolean contains(String str); //判断字符串是否包含str
boolean endsWith(String str); //判断字符串是否以str结尾
boolean startWith(String str)l //判断字符串是否以str开始
-----------------------------------------------------------------------------------------------------------
char[] toCharArray(); //将字符串转换成字符数组
byte[] getBytes(); //根据所使用的编码集,将字符串转换成byte数组
String toUpperCase(); //将字符串中的字母全部转换成大写
String toLowerCase(); //将字符串中的字母全部转换成小写
String replace(char oldChar,char newChar); //将字符串中的所有oldChar字符全部替换为newChar字符
-----------------------------------------------------------------------------------------------------------
String[] split(String str); //根据str将字符串拆分
String trim(); //去掉字符串的前后空格
StringBuilder和StringBuffer
String类型的字符串一经创建后不可以改变,而StringBuilder和StringBuffer类型的字符串可以改变。
在不考虑线程安全的情况下尽量使用StringBuilder
常用方法
//StringBuilder和StringBuffer的用法基本相同
StringBuilder append(String str); //将str追加到字符序列的结尾处
StringBuilder reverse(); //将字符序列反转,并取代原序列
StringBuilder delete(int startIndex,int endIndex); //删除startIndex处开始(包括),endIndex结束(不包括)的所有字符
StringBuilder deleteCharAt(int index); //删除index处的字符
StringBuilder replace(int startIndex,int endIndex,String str); //将startIndex处开始(包括),endIndex结束(不包括)替换为str
StringBuilder insert(int offset,String str); //将str插入到offset的位置
int capasity(); //返回当前容量
int length(); //返回当前字符序列的长度
String toString(); //返回此字符序列的字符串表示形式
String subString(int beginIndex); //返回一个从beginIndex处开始的子字符串
String subString(int beginIndex,int endIndex); //返回一个从beginIndex开始到endIndex - 1处的子字符串