1,String类
代表字符串,字符串是常量,用双引号引起来表示。它们在创建之后不能更改。
String对象的字符内容是储存在一个字符数组value[]中的
2,String常用方法
int length():返回字符串的长度 return value.length
char charAt(int index):返回某索引处的字符 return value[index]
boolean isEmpty():判断是否是空字符串 return value.length==0
String toLowerCase():使用默认语言环境,将String中的所有字符串转换为小写
String toUpperCase():使用默认语言环境,将String中的所有字符串转换为大写
3,String与基本数据类型包装类的转换
String与基本数据类型之间的转换
String--->基本数据类型,包装类:调用包装类的静态方法:parseXxx(str)
基本数据类型,包装类--->String:调用String重载的valueOf(xxx)
String与char[]之间的转换
String--->char[]:调用String的toCharArray()
char[]--->String:调用String的构造器
String与byte[]之间的转换
String--->byte[]:调用String的getByte()
3,StringBuffer和StringBulider的使用
StringBuffer,String,StringBulider三者的异同?
String:不可变的字符序列:底层结构使用char[]存储
StringBuffer:可变的字符序列:线程安全的,效率低:底层使用char[]存储
StringBulider:可变的字符序列:jdk5.0新增的,线程不安全的,效率高:底层使用char[]存储
源码分析
String str=new String();//new char[0];
String str1=new String("abc");//new char[]{"a","b","c"};
StringBuffer sb1=new StringBuffer();//char[] value=new char[16];底层创建了一个长度是16
的数组。
sb1.append('a');//value[0]='a';
sb2.append('b');//value[1]='b';
StringBuffer sb2=new StringBuffer("abc");//char[] value=new char[];
问题一:System.out.println(sb2.length());//0
问题二:扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组
默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的元素复制到新的数组中
指导意义:开发中建议大家使用:StringBuffer(int capacity)或StringBulider(int capacity)
总结: 增:append(xxx);
删:deldelete(int start,int end);
改:setCharSt(int n,char ch);
查:charAt(int n);
插:insert(int offset,xxx);
长度:length();
遍历:for+charAt()
对比String,StringBuffer,StringBulider三者的效率: 从高到低
StringBulider>StringBuffer>String
4,关于String的练习之字符串反转
将一个字符串进行反转,将字符串中指定部分进行反转。比如“abcdefg”反转为“abfecg”
首先,先将字符串转换为char[],在通过for将char[]中数据进行反转
public class Main {
/*
将一个字符串进行反转。将字符串中指定部分进行反转。比如“abcdefg”反转为“abfedcg”
*/
public static String reverse(String str,int startIndex,int endIndex){
char[] arr=str.toCharArray();
for(int x=startIndex,y=endIndex;x<y;x++,y--){
char temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
return new String(arr);
}
public static void main(String[] args) {
String str="abcdefg";
String reverse=reverse(str,2,5);
System.out.println(reverse);
}
}