一、String类的概述
字符串也是一个封装好的类,存储方法区的常量池里面
二、String类的构造方法
1、String(String original):把字符串数据封装成字符串对象
2、String(char[] value):把字符数组的数据封装成字符串对象
3、String(char[] value, int index, int count):把字符数组中的一部分数据封装
public static void main(String[] args) {
// String(char[] value):把字符数组的数据封装成字符串对象
char[] arr=new char[]{'a','b','c'};
// String(char[] value, int index, int count):把字符数组中的一部分数据封装
String s1=new String(arr,offset:1,count:2);//从角标1开始取两个元素
// String(String original):把字符串数据封装成字符串对象//创建字符串对象
String s2=new String(original:"bc");
System.out.println(s1);
System.out.println(s2);
}
输出结果如下:
三、String类的判断功能
1、boolean equals(Object obj):比较字符串的内容是否相同
// boolean equals(Object obj):比较字符串的内容是否相同
String s="helloworld";
String s1="hello";
String s2="helloworld";
System.out.println(s.equals(s1));
System.out.println(s.equals(s2));
输出结果如下
2、boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
// boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
String s3="helloworld";
String s4="HelloWorld";
System.out.println(s3.equalsIgnoreCase(s4));
输出结果如下:
`
3、boolean startsWith(String str):判断字符串对象是否以指定的str开头
// boolean startsWith(String str):判断字符串对象是否以指定的str开头
String s5="helloworld";
System.out.println(s5.startsWith("h"));
System.out.println(s5.startsWith("he"));
System.out.println(s5.startsWith("helloworld"));
输出结果如下:
4、boolean endsWith(String str):判断字符串对象是否以指定的str结尾
// boolean endsWith(String str):判断字符串对象是否以指定的str结尾
String s6="helloworld";
System.out.println(s6.endsWith("d"));
System.out.println(s6.endsWith("ld"));
System.out.println(s6.endsWith("helloworld"));
输出结果如下图:
四、键盘模拟登录案例
import java.util.Scanner;//导包
// 模拟登陆:键盘录入用户名和密码进行比较,如果相等提示登陆成功
Scanner sc=new Scanner(System.in);//Scanner是util类型需要导包
String username="admin";
String password="123";
//三次录入机会
for (int i=0;i<3;i++){
System.out.println("请输入用户名");
String name=sc.next();
System.out.println("请输入密码");
String ps=sc.next();
//重写equals比较字符串的内容是否相等
if(name.equals(username)&&ps.equals(password)){
System.out.println("登陆成功");
break;//登录成功跳出循环
}else{
//登陆失败的时候
System.out.println("登陆失败,您还有"+(2-i)+"次机会");//从零开始
}
}
输出结果如图:
五、String类的获取功能
1、int length():获取字符串的长度,其实也就是字符个数
String s1="helloworld";
System.out.println(s1.length());//获取字符串长度,也可以看出字符数组
2、char charAt(int index):获取指定索引处的字符
// char charAt(int index):获取指定索引处的字符
// 遍历数组的第一种方式length()和charAt()
String s1="helloWorld";
for(int i=0;i< s1.length();i++){
System.out.println(s1.charAt(i));
}
输出结果如下图:
3、int indexOf(String str):获取str在字符串对象中第一次出现的索引
// indexOf(String str):获取str在字符串对象中第一次出现的索引
System.out.println(s1.indexOf("o"));//没有找到时 index=-1;
4、int lastIndexOf(String str):获取str在字符串对象中最后一次出现的索引
// lastIndexOf(String str):获取str在字符串对象中最后一次出现的索引
System.out.println(s1.lastIndexOf("o"));
3/4输出结果如图:
5、String substring(int start):从start开始截取字符串
// String substring(int start):从start开始截取字符串
System.out.println(s1.substring(2));// lloworld 从start这个索引处开始截取字符串---默认截取到最后
输出结果如下图:
6、String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end
// substring(int start,int end)
System.out.println(s1.substring(0,5));//[start,end)
输出结果如下图:
六、获取功能案例:遍历字符串数组的两种方式
// 遍历数组的第一种方式s1.length()和charAt();
String s="helloWorld";
for(int i=0;i< s1.length();i++){
System.out.println(s1.charAt(i));
}
// 第二种遍历数组:char[] toCharArray():把字符串转换为字符数组
String s="helloWorld";
char[] arr = s.toCharArray();
for (int i=0;i<arr.length;i++){
System.out.println(arr[i]+"\t");
}
输出结果如下图:
七、String类的转换功能
1、char[] toCharArray():把字符串转换为字符数组
String s="helloWorld";
char[] arr = s.toCharArray();//toCharArray转成字符数组
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+"\t");
}
2、String toLowerCase():把字符串转换为小写字符串
System.out.println(s.toLowerCase());//toLowerCase转小写
3、String toUpperCase():把字符串转换为大写字符串
System.out.println(s.toUpperCase());//toUpperCase转大写
八、String类的其他方法演示
1、去除字符串两端空格String trim()
2、按照指定符号分割字符串String[] split(String str)
/*1、去除字符串两端空格String trim()
2、按照指定符号分割字符串String[] split(String str)*/
String s=" ==helloworld== ";
String s1=" ==hello world== ";
//输出s/s1看一下去掉空格之前的效果
System.out.println(s);
System.out.println(s1);
// 去除字符串两端空格String trim(),只能去除两边的///replace 去除中间的
//System.out.println(s1.replace(target:"要被替代的旧的值",replacement:"新的值"));
System.out.println(s.trim());
// 按照指定符号分割字符串String[] split(String str)
String s3="2019,11,13";
String[] arr = s3.split(",");
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
输出结果如下图:
九、String常见的面试题
1、Object中的equals方法和String中的equals方法有什么区别
Object中的equals方法:
比较的是内存的地址值,只有两个变量在内存中指向同一个对象才会返回true
String中的equals方法:
重写了equals方法,在比较两个字符串的时候,会根据内存进行比较,只要两个字符串的内容相同返回的就是true.
2、判断两个字符串是否相等
String a=new String("hello");//存在堆中,会创建两个对象,一个在堆里面new出来的对象,一个在常量池里面的常量对象
// System.out.println(a);//值
// String b="hello";//方法区的常量池
String b=new String("hello");
String c="hello";
String d="hello";
System.out.println(a==b);//false
System.out.println(a==c);//false
System.out.println(a.equals(b));//true
System.out.println(c==d);//true
3、下面语句会在内存中创建几个对象
String a=new String("hello");//存在堆中,会创建两个对象,一个在堆里面new出来的对象,一个在常量池里面的常量对象
4、判断b 和 c两个字符串是否相等
String a="ab";
String b="abc";
String c=a+"c";
System.out.println(b.equals(c));//true内容相同
// String a=new String("abc");
System.out.println(b==c);//false地址不同
十、StringBuilder类的概述(高效缓冲字符串,可以直接实例化)
比普通的字符串用起来更加强大,一个字符串类。
String与StringBuilder的区别
1、普通的String长度是不可以改变的,高校字符串是可以改变的
2、普通得String内容是固定的,StringBuilder内容是可变的
StringBuilder类的常用方法
1、构造方法:StringBuilder()
StringBuilder sb=new StringBuilder();
2、成员方法:
(一)添加功能:append(任意类): 往容器里面添加内容,链式编程,追加一个之后返回的还是sb对象,StringBuilder编程时只会产生一个对象
//先进行实例化,创建一个对象
StringBuilder sb=new StringBuilder();
//往字符串里面添加数据
sb.append(2).append("哈哈").append('a').append('b');
System.out.println(sb);
输出结果如下图:
(二)删除功能:int delete(int start,int end) 移除此序列的字符串中字符[start,end)
int deleteCharAt(int index) 移除此序列指定位置上的char
//产出区间
sb.delete(3,4);
System.out.println(sb);
sb.deleteCharAt(2);
System.out.println(sb);
输出结果如下图:
(三)替换功能:StringBuilder replace(int start,int end,string str)
sb.replace(0,1,"3333");//[start,end)
System.out.println("代替:"+sb);
输出结果如下图:
注意:StringBuilder与StringBuffer两者都是可变字符串,区别在于StringBuilder是单线程的,线程不安全,StringBuffer是多线程的,线程安全。 StringBuilder-----StringBuffer-------在开发中一般使用StringBuil
(四)反转功能:StringBuilder: reverse—字符串反转(相当于String 倒着遍历)
StringBuilder sb=new StringBuilder();
sb.append(2).append("哈哈").append('a').append('b');
//输出追加的序列
System.out.println(sb);
//反转
sb.reverse();
//输出反转之后的序列
System.out.println(sb);
输出结果如下图:
(五)获取功能:int capacity():返回当前容量 //int length()返回字符数长度
String s="hello";
StringBuilder sb=new StringBuilder();//里面没有任何内容的,可以看成 一个容器用来存储字符串
System.out.println(s.length());//length获取的是内容的长度
// length获取的是高效字符串内容的长度
// int capacity()返回当前容量,创建一个StringBuilder的时候,系统会默认分配16个字节长度
System.out.println(sb.capacity());
输出结果如下图:
String substring(int start):返回一个新的String,它包含此字符序列当前所包含的子序列
StringBuilder sb=new StringBuilder();
sb.append('a').append("b").append('c').append('d');
//输出追加元素之后的字符序列
System.out.println(sb);
String s = sb.substring(3);
//输出角标从3开始的字符序列
System.out.println(s);
输出结果如下图:
String substring(int start,int end):返回一个新的String它包含此字符序列当前所包含的子序列
StringBuilder sb=new StringBuilder();
sb.append('a').append("b").append('c').append('d');
System.out.println(sb);
String s = sb.substring(1,3);//[1,3)--- 1是闭区间 3是开区间
System.out.println(s);
输出结果如下图:
int lastIndexOf(String str):返回最右边出现的指定的子字符串在此字符串中的索引数值
StringBuilder sb=new StringBuilder();
sb.append('a').append("b").append('c').append('d');
System.out.println(sb);
//搜索子字符串“b”在字符串中的位置
int s = sb.lastIndexOf("b");
//搜索子字符串“e”在字符串中的位置
int s1=sb.lastIndexOf("e");//字符串中没有“e”这个字符串默认输出 -1
System.out.println(s);
System.out.println(s1);
输出结果如下图:
int intdexOf(String str):返回第一次出现的指定子字符串在该字符串中的索引位置
StringBuilder sb=new StringBuilder();
sb.append('a').append("b").append('c').append('d');
System.out.println(sb);
//查询c所在的索引数
int i = sb.indexOf("c");
System.out.println(i);
输出结果如下图:
int intdexOf(String str,int fromIndex):从指定的索引处开始,返回第一次出现的指定子字符串在该字符串的索引。
StringBuilder sb=new StringBuilder();
sb.append('a').append("b").append('c').append('d');
System.out.println(sb);
//搜素从“0”开始字符串“c”所出现的索引数
int i = sb.indexOf(str:"c",fromIndex:0);
System.out.println(i);
输出结果如下图:
char charAt(int index):返回此序列中指定索引处的char值
StringBuilder sb=new StringBuilder();
sb.append('a').append("b").append('c').append('d');
System.out.println(sb);
//搜索索引数为“3”的字符
char c = sb.charAt(3);
System.out.println(c);
输出结果如下图: