一、String类
1、解释:
String类位于JAVA中的java.lang.String包中,java中所有的字符串都是此类的实例 其底层代码是将char数组进行封装操作,例如 "abc"--->是字符串对象,底层是 private final char value['a','b','c'];
2、字符串的创建方式
1、 String s="abc"; 需要注意的是,按照此方法创建两个值一样的字符串时,不会创建新的String类对象,而是调用旧的地址
String s ="abc";
String ss="abc";
System.out.println(s==ss);//true
2、String s1=new String("abc"); 这样创建的是两个不同的字符串
String s1=new String("abc");
String s2=new String("abc");
System.out.println(s2==s1);//false
3、字符串的值不可改变 但是我们日常写代码时,字符串可以添加,原理如下
//public final class String
String s3="abcd";
s3+="efg";//创建新的字符串"abcdefg"
s3+="1111";//再次创建新的字符串"abcdefg1111"
3、String类的方法
1、四种构造方法+对象.getBytes();+对象.getCharArray();
构造方法
String();
String(String s)
String(byte[] byte)
String(char[] chars)
*/
String s1 =new String();//无参构造
String s2 =new String("abc");//有参构造
//现代传输为数字话传输
String s3="你好";
//明码编码
byte[] ss3=s3.getBytes();//String类的方法,将字符串转为byte类型
//解码 字节数组转为字符串
String s4=new String(ss3);//String(byte[] byte)
System.out.println(s4);
//当使用特殊的编码时 函数后面+throws UnsupportedEncodingException
byte[] sss3=s3.getBytes("GBK");//中文编码
String ss4=new String(sss3, "GBK");//String
System.out.println(ss4);
//当想要用Arrays的方法操作字符串时
String str="cba";
char[] chars=str.toCharArray();//将字符产转换成字符数组
Arrays.sort(chars);//可以使用数组的方法,例如此例 字符数组排序
String s5=new String(chars);//需要定义新字符串接收
System.out.println(s5);
2、六种判断功能
/*
判断功能
boolean equals(Object anObject)
boolean equalsIgnoreCase(String anotherString)
boolean contains(CharSequence s)
boolean startsWith(String prefix)
boolean endsWith(String suffix)
boolean isEmpty
*/
String s10="abcd";
String s20="abcD";
System.out.println(s10.equals(s20));//比较是否一致
System.out.println(s10.equalsIgnoreCase(s20));//忽略大小写比较
System.out.println(s10.contains("ab"));//判断是否包含指定的子串
System.out.println(s10.startsWith("ac"));//判断是否为指定的字符串开头
System.out.println(s10.endsWith("cd"));//判断是否以指定的字符串结尾
System.out.println(s10.isEmpty());//判断字符串是否为空
3、获取功能
/*
获取功能
int length() 获取字符串长度
char charAt(int index)获取指定位置上的字符
int indexOf(String str)返回字符串首次出现的位置
int indexOf(String str, int fromIndex) 从指定位置开始查找指定字符
int lastIndexOf(String str)//从后向前找
int lastIndexOf(String str, int fromIndex)//指定位置从后往前找
String substring(int beginIndex)从起始位置开始截取后面打印
String substring(int beginIndex, int endIndex)从指定范围内截取打印
*/
String str1="abcdefg";
System.out.println(str1.length());//获取长度,长度包括空格等
System.out.println(str1.charAt(2));//返回索引位置上的字符
System.out.println(str1.indexOf("c"));//返回查找字符的索引
System.out.println(str1.indexOf("c",3));//从指定位置开始查找
System.out.println(str1.lastIndexOf("c"));//从后向前找
System.out.println(str1.lastIndexOf("c",7));//从指定位置从后往前找
System.out.println(str1.substring(1));//从起始位置开始截取后面打印
System.out.println(str1);
System.out.println(str1.substring(0,6));//从指定范围内截取打印
4、转换功能
byte[] getBytes(); 将字符串转为byte类型
char[] toCharArray(); 将字符串转为字符数组
String valueOf(int i) 将int转String
String valueOf(char data[]) 将char[]转String
String toLowerCase()//转小写
String toUpperCase()//转大写
String concat(String str)将str拼接在原字符串后
String[] split(String regex)//将字符串按照指定的分割符号拆分 并存入字符串数组
使用方法
String str2 =String.valueOf(1000);
System.out.println(str.charAt(1));//0
int a=Integer.parseInt(str2);//String 转 int
System.out.println(a);
String str3=String.valueOf("abc".toCharArray());//将"abc"转为数组再转会字符串
System.out.println(str3);
String str4="abcAd";
System.out.println(str4.toLowerCase());//转小写
System.out.println(str4.toUpperCase());//转大写
System.out.println(str4.concat(str3));//拼接
String str5="ab;cdE;FG";
String[] strings=str5.split(";");//将字符串按照指定的分割符号拆分 并存入字符串数组
System.out.println(Arrays.toString(strings));//[ab, cdE, FG]
5、替换功能
String replace(CharSequence target, CharSequence replacement)
//将字符串中指定的所有字符替换成新的指定字符
String replaceAll(String regex, String replacement)
//通过正则表达式匹配将同一类全部替换 "\\d"表示数字,"[a-z]"表示字母
String replaceFirst(String regex, String replacement)
//通过正则表达式匹配将该类第一个出现的字符替换
String trim()
//消除字符串两边的空格 中间无法消除
//如果想要消除中间的可以用replace替换
String Str =" abcdefg123 ";//将小写的c用大写的C替换
System.out.println(Str.replace("c","C"));//将小写的c用大写的C替换
System.out.println(Str.replaceAll("\\d","C"));//通过正则表达式将同一类全部替换
System.out.println(Str.replaceFirst("\\d","e"));//将第一个数字替换成e
System.out.println(Str.length());//由空格 长度12
System.out.println(Str.trim().length());//消除两侧空格 无空格 长度10
二、StrinigBuffer类
1、解释
StringBuffer可以更好的进行字符串拼接,相比String类单纯拼接更加省时省空间。StringBuffer是线程安全的可变字符序列、是内容可以改变的字符串 StringBuffer底层是char[] value,String类底层是private final char value[],StringBuffer可改变的原因就是没有final修饰。每次添加内容都是对此数组进行操作,不会创建新的对象 当字符数组满了之后会再StringBuffer类内部创建新的数组对象。需要注意的是StringBuffer类型的字符串在调用操作时的改变会影响自身的值
2、方法
1、构造方法
public StringBuffer(String str) {
super(str.length() + 16);
append(str);
}
public StringBuffer() {
super(16);
}
public StringBuffer(int capacity) {
super(capacity);
}
//创建一个内容长度+16的字符数组
StringBuffer s1=new StringBuffer("abcd");
s1.append("efg");//+efg,但不创建新的数组
StringBuffer s2=new StringBuffer();//空参数组长度为16
//StringBuffer s1=new StringBuffer("abcd");实参构造为内容长度+16的字符数组
StringBuffer s3=new StringBuffer(100);//可以指定数组长度
构造分为三种方法,分别是无参构造(),传入字符串构造,传入长度构造。空参构造时默认长度为十六,传入字符串构造时,默认长度为字符串长度+16.
2、插入
StringBuffer insert(int offset, String str)
StringBuffer append(String str)
例:
System.out.println(s1);//abcdefg
s1.insert(1,"a");//想指定位置插入
s1.append("ab");//向末尾插入
System.out.println(s1);//aabcdefgab
插入分为两种方法,insert是指定位置插入,append是向末位插入,两种方法都是非静态方法,需要创建对象之后调用。
3、删除
StringBuffer deleteCharAt(int index)
StringBuffer delete(int start, int end)
例:
s1.deleteCharAt(1);//指定位置删除
System.out.println(s1);//abcdefgab
s1.delete(0,3);//删除指定区间的元素 0,1,2位置的元素
System.out.println(s1);//defgab
删除同样是两种方法,deleteCharAt是指定位置删除,需要传入索引值;delete是删除区间元素,需要给出索引范围。两种方法都是非静态方法,需要创建对象之后调用。
4、替换
//StringBuffer replace(int start, int end, String str)在区间内替换
例:
s1.replace(0,3,"aaa");
System.out.println(s1);//aaagab
替换只有一种方法,replace传入范围和替换的元素,完成替换。这是非静态方法,需要创建对象之后调用。
5、反转逆序
StringBuffer reverse()
例:
s1.reverse();
System.out.println(s1);//bagaaa
reverse是反转字符串的一种方法,将字符串逆序排列。这是非静态方法,需要创建对象之后调用。
三、StringBuilder类
其是多线程并发且线程安全的StringBuffer类,与StringBuffer用法大致相同,StringBuffer由于方法上没有加锁,在多任务执行时线程不安全,只适合单线程运行