1.String类
字符串定义:
(1)String类代表的是字符串 是Java程序中的字面值
//例如:
String name01="zhangsan";
String name02="lisi";
(2)String类是常量,因为一旦确定字符串的常量值,在创建之后就不能更改
字符串本身不可改变,但是字符串所在的地址可以改变
(3)String类字符串有大量的构造方法。但是通过String类的构造方法和new方式创建的对象有什么不同呢?
//""方式创建对象和new方式创建对象有什么区别
//""创建对象
String s01="zhangsan";
//new方式创建对象
String s02=new String("zhangsan");
//使用==判断地址是否相同
System.out.println(s01==s02);
//equals方法判断内容是否一致
System.out.println(s01.equals(s02));
两种创建方式的不同:
s01的创建方式:在内存中只有一个对象。这个对象在字符串常量池中
s02的创建方式:在内存中有两个对象,一个在new对象时产生在堆中,一个是字符串本身对象,在字符串常量池中。
2.String类的构造方法
//String类的构造方法
//(1)创建String对象,字符串中没有内容
String s01=new String();
//(2)创建String对象,把数组元素作为字符串内容
int[] int01=new int[]{25,35,64,15,12}
String s02=new String(int01);
//(3)创建String对象,把部分元素内容作为字符串内容
String s03=new String(int01,1,3);
3.String类常用方法
(1)tocharArray()
作用:转成字符数组
String s01="12345 adff sdaf sd";
//变成数组
char[] a=s01.toCharArray();
System.out.println(a);
(2)String(char[])
作用:利用字符数组构造String
String s01="12345 adff sdaf sd";
//变成数组
char[] a=s01.toCharArray();
System.out.println(a);
//变成大写
String a01=s01.toUpperCase();
System.out.println(a01);
(3)length()
作用:获得字符串长度
//获取字符串的长度
System.out.println(s01.length());
(4)toUppercase()/toLowercase()
作用:转大写/转小写
String s01="12345 adff sdaf sd";
//变成数组
char[] a=s01.toCharArray();
System.out.println(a);
//变成大写/小写
String a01=s01.toUpperCase();
String a02=s01.toLowerCase();
System.out.println(a01);
(5)Contains(String s)
作用:判断s子串是否存在
String s01="12345 adff sdaf sd";
//变成数组
char[] a=s01.toCharArray();
System.out.println(a);
//变成大写/小写
String a01=s01.toUpperCase();
String a02=s01.toLowerCase();
System.out.println(a01);
//获取字符串的长度
System.out.println(s01.length());
//判断子串是否存在
boolean a02=s01.contains("adffs11");
System.out.println(a02);
(6)replace(String str1,String str2)
作用:将str1的子串替换成str2子串
//替换子串replace(旧字符,新字符)
String a07=s01.replace("s","@");
System.out.println(a07);
String a08=s01.replace("f","$");
System.out.println(a08);
(7)startWith(String str)
作用:判断是否以s子串开头
//判断字符串是否以S子串开头
boolean a03=s01.startsWith("1234");
boolean a04=s01.startsWith("555");
System.out.println(a03);
System.out.println(a04);
(8)endWith(String str)
作用:判断String是否以str子串结尾
//判断字符串是否以s子串结尾
boolean a05=s01.endsWith("111");
boolean a06=s01.endsWith("fsd");
System.out.println(a05);
System.out.println(a06);
(9)trim()
作用:去除字符串字符前后空格换行等字符
//去除字符串前后的空格
String a11=s01.trim();
System.out.println(a11);
(10)indexOf(String s)/lastindexOf(String s)
作用:返回s子串最早出现下标
//返回s子串最早出现的下标
int startIndex=s01.indexOf("a");
System.out.println(startIndex);
//返回s子串最后出现的下标
int endIndex=s01.lastIndexOf("s");
System.out.println(endIndex);
(11)indexOf(String str,int start)
作用:查找子串str在string中start下标之后第一次出现的下标
(12)split(String s)
作用:以s为分隔符 分为多个子串 返回字符串数组
//以s子串为分隔符 分为多个子串
/*String[] a10=s01.split("a");
for (int i = 0; i < a10.length; i++) {
System.out.print(a10[i]+"\t");
}*/
(13)SubString(int a,int b)
作用:返回字符串中a下标到b下标的子串(包括a下标,不含b下标)
//返回字符串中a下标到b下标的子串(包括a下标 不含b)
String a09=s01.substring(2,5);
System.out.println(a09);
(14)StringBuilder(字符串建造者)
作用:字符串的拼接
StringBuilder sb=new StringBuilder(s);
sb.append("C");
s=sb.toString();
【注:】实际的开发过程中不会使用“+”号拼接字符串 太浪费内存空间 浪费时间
大量String连接时,会产生中间对象
解决办法:用StringBuilder完成字符串连接
(15)可变长字符串【重点】
类型 | JDK | 速度 | 安全性 |
StringBuffer | JDK1.0 | 慢 | 线程安全 |
StringBuilder | JDK1.5 | 快 | 线程不安全 |
可变长字符串在字符串的拼接过程中效率比String高很多
例子:
StringBuilder sb = new StringBuilder();
sb.append("ABC");//将"ABC"拼接到sb的结尾处
等效于:
String sb = "";
sb+="ABC";