目录
1.StringBuilder与StringBuffer介绍
(1)直接使用常量构造
- public static void main(String[] args) {
- String str = "I love you";
- System.out.println(str);
- }
内存展示图:
(2)new一个String对象
- public static void main(String[] args) {
- String str2 = new String("love you too");
- System.out.println(str2);
- }
(3)使用数组进行构造
- public static void main(String[] args) {
- char[] arr = {'6','6','6'};
- String str3 = new String(arr);
- System.out.println(str3);
- }
为什么String的内存布局是这样呢?就需要先往下了解String类
(1)String类
(2)String类的空间分配
String str = new String("abcd");
(1)比较字符串是否相等
- public static void main(String[] args) {
- String str1 = new String("abcd");
- String str2 = new String("abcd");
- System.out.println(str1==str2);
- if(str1==str2) {
- System.out.println("字符串str1==字符串str2");
- }else {
- System.out.println("字符串str1!=字符串str2");
- }
- }
错误原因:它们都属于引用类型,不能直接用等号(==)比较;而用等号比较则比较的是它们对象的地址
- public static void main(String[] args) {
- String str1 = new String("abcd");
- String str2 = new String("abcd");
- System.out.println(str1.equals(str2));
- }
这是String类重写equals的原码:需要使用String类型的变量去调用才会使用该方法
Object(父类)的equals方法:
画图解析:
String类的equals方法
Object类的方法:如果没有去使用String变量去调用equals方法,而直接使用==号比较,本质会默认调用Object的equals方法
代码举例:
- public static void main(String[] args) {
- String str1 = new String("abcd");
- String str2 = new String("ABCD");
- System.out.println(str1.equalsIgnoreCase(str2));
- }
(2)比较字符串大小
- public static void main(String[] args) {
- String str1 = new String("abcd");
- String str2 = new String("abce");
- String str3 = new String("abc");
- System.out.println(str1.compareTo(str2));
- System.out.println(str1.compareTo(str3));
-
- }
比较方式:
(1)一一对比它们的ASCII值,如a的ASCII值
(2)字符串长度不一,但是前面有的部分都相同时,长的字符串大;如:abc
返回值:
返回值的数字=它们之间的ASCII的差值;如:aa,则返回1
- public static void main(String[] args) {
- String str1 = new String("abcd");
- String str2 = new String("ABCC");
- System.out.println(str1.compareToIgnoreCase(str2));
- }
前言:都需要使用String类型来调用
(1)方法认识
功能:返回index位置上字符,如果index为负数或者越界,抛出IndexOutOfBoundsException异常
(2)举例
- public static void main(String[] args) {
- String str = new String("abcdefg");
- int index = str.charAt(3);
- System.out.println(index);
- System.out.println(str.charAt(0));
- }
(1)int indexOf(int ch)方法
功能:返回ch第一次出现的位置,没有返回-1
举例:
- public static void main(String[] args) {
- String str = new String("aabbccdd");
- int index = str.indexOf('b');//查找b
- System.out.println(index);
- System.out.println(str.indexOf('d'));//查找d
- }
(2)int indexOf(int ch, int fromIndex)方法
- public static void main(String[] args) {
- String str = new String("aabbccdd");
- System.out.println(str.indexOf('c',2));
- }
直接从2位置(第一个b的位置)开始找;如果从d的位置,则会找不到
(3)int indexOf(String str) 方法
功能:返回str第一次出现的位置,没有返回-1
- public static void main(String[] args) {
- String str = new String("aabbccdd");
- System.out.println(str.indexOf("ab"));
- }
(4)int indexOf(String str, int fromIndex)方法
功能:从fromIndex位置开始找str第一次出现的位置,没有返回-1
- public static void main(String[] args) {
- String str = new String("aabbccdd");
- System.out.println(str.indexOf("ab",2));
- }
(1)int lastIndexOf(int ch) 方法
- public static void main(String[] args) {
- String str = new String("abcdef");
- System.out.println(str.lastIndexOf('b'));
- }
(2)int lastIndexOf(int ch, int fromIndex)方法
- public static void main(String[] args) {
- String str = new String("abcdef");
- System.out.println(str.lastIndexOf('b',5));
- }
(3)int lastIndexOf(String str) 方法
- public static void main(String[] args) {
- String str = new String("abcdef");
- System.out.println(str.lastIndexOf("abc"));
- }
(4)int lastIndexOf(String str, int fromIndex)方法
- public static void main(String[] args) {
- String str = new String("abcdef");
- System.out.println(str.lastIndexOf("abc",2));
- }
(1)认识valueOf()
(2)举例
- public static void main(String[] args) {
- String str = String.valueOf(1234);
- System.out.println(str);
- }
从数字1234变成字符串1234
一般用于转化数字字符串
(1)认识Integer.parseInt()
(2)举例
- public static void main(String[] args) {
- int tmp = Integer.parseInt("1234");
- System.out.println(tmp);
- }
字符串1234变成了数字1234
(1)小写转大写
- public static void main(String[] args) {
- String str = new String("abcd");
- String tmp = str.toUpperCase();
- System.out.println(tmp);
- }
(2)大写转小写
- public static void main(String[] args) {
- String str = new String("ABCD");
- String tmp = str.toLowerCase();
- System.out.println(tmp);
- }
(1)字符串转数字
- public static void main(String[] args) {
- String str = new String("abcde");
- char[] arr = str.toCharArray();
- for (int i = 0; i < arr.length; i++) {
- System.out.print(arr[i]+" ");
- }
- }
(2)数字转字符串
- public static void main(String[] args) {
- char[] ch = {'a','b','c'};
- String s = new String(ch);
- System.out.println(s);
- }
- public static void main(String[] args) {
- String str = String.format("%d--%d--%d",1999,5,1);
- System.out.println(str);
- }
(1)替换所有的指定内容
- public static void main(String[] args) {
- String str = new String("aabbccdd");
- String tmp= str.replaceAll("ab","xx");
- System.out.println(tmp);
- }
(2)只替换第一个指定内容
- public static void main(String[] args) {
- String str = new String("aabbccdd");
- String tmp= str.replaceFirst("a","xx");
- System.out.println(tmp);
- }
(1)全部按指定拆分
- public static void main(String[] args) {
- String str = new String("abc def ghi");
- String[] tmp = str.split(" ");//以空格作为拆分依据
- for (String s:tmp) {
- System.out.println(s);
- }
- }
(2)指定拆分n组
- public static void main(String[] args) {
- String str = new String("abc def ghi");
- String[] tmp = str.split(" ",2);//拆成两组
- for (String s:tmp) {
- System.out.println(s);
- }
- }
(3)需要转义的拆分标志
- public static void main(String[] args) {
- String str = new String("aa.bb.cc");
- String[] tmp = str.split("\\.");
- for(String s:tmp) {
- System.out.println(s);
- }
- }
- public static void main(String[] args) {
- String str = new String("aa\\bb\\cc");//两个\\表示一个\
- String[] tmp = str.split("\\\\");//四个\表示一个\
- for(String s:tmp) {
- System.out.println(s);
- }
- }
- public static void main(String[] args) {
- String str = new String("aa+bb+cc");
- String[] tmp = str.split("\\+");//2个\表示一个\
- for(String s:tmp) {
- System.out.println(s);
- }
- }
- public static void main(String[] args) {
- String str = new String("aa|bb|cc");
- String[] tmp = str.split("\\|");//2个\表示一个\
- for(String s:tmp) {
- System.out.println(s);
- }
- }
- public static void main(String[] args) {
- String str = new String("aa*bb*cc");
- String[] tmp = str.split("\\*");//2个\表示一个\
- for(String s:tmp) {
- System.out.println(s);
- }
- }
(4)拆分多标志
- public static void main(String[] args) {
- String str = new String("aa-bb cc");
- String[] tmp = str.split("-| ");//以-和空格拆分
- for(String s:tmp) {
- System.out.println(s);
- }
- }
(1)从指定位置截取到末尾
- public static void main(String[] args) {
- String str = new String("0123456");
- String tmp = str.substring(2);//从2下标开始截取
- System.out.println(tmp);
- }
(2)截取指定区间
- public static void main(String[] args) {
- String str = new String("0123456");
- String tmp = str.substring(2,5);//截取[2,5)
- System.out.println(tmp);
- }
- public static void main(String[] args) {
- String str = new String(" I love you ");
- System.out.println(str);//未去空格
- System.out.println(str.trim());//去掉空格
- }
(1)String类就是用来定义字符串的,而字符串中的内容不可修改
(2) 所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象
(3)简单认识String类
(1)原因1
String str = "abcd";
(2)原因2
如:
- public static void main(String[] args) {
- char[] value = {'a','b','c','d'};
- value[1] = 'x';//修改数组内容
- value = new char[10];//指向新的对象
- }
加final前:
加了final后
- public static void main(String[] args) {
- char[] arr = {'a','b','c','d'};
- arr[0] = 'x';
- arr[1] = 'q';
- String str = new String(arr);
- System.out.println(str);
- }
前言:SrtingBuilder和StringBuffer都是两个特殊的类,与String类似,都是字符串类型。
(1)StringBuilder
- public static void main(String[] args) {
- StringBuilder stringBuilder = new StringBuilder("abcd");
- System.out.println(stringBuilder);
- }
- public static void main(String[] args) {
- StringBuilder stirngBuilder = new StringBuilder("abcd");
- stirngBuilder.append("1234");//在字符串后面拼接1234
- stirngBuilder.append("xxx").append("ppp");//可以多次拼接
- System.out.println(stirngBuilder);//操作的都是同一个对象
- }
- public static void main(String[] args) {
- StringBuilder stirngBuilder = new StringBuilder("abcd");
- stirngBuilder.reverse();
- System.out.println(stirngBuilder);
- }
(2)StringBuffer
- public static void main(String[] args) {
- StringBuffer stringBuffer =new StringBuffer("abcd");
- System.out.println(stringBuffer);
- }
(1)StringBuffer与StringBuilder的区别
(2)StringBuilder与String的相互转化
- public static void main(String[] args) {
- StringBuilder stringBuilder = new StringBuilder("abcd");
- String str = stringBuilder.toString();
- System.out.println(str);
- }
- public static void main(String[] args) {
- String str = new String("abcd");
- StringBuilder stringBuilder = new StringBuilder(str);//调用构造方法
- System.out.println(stringBuilder);
- }
- public static void main(String[] args) {
- String str = new String("abcd");
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(str);
- System.out.println(stringBuilder);
- }
(3)StringBuffer、StringBuilder和String的区别