目录
三、String对象比较(equals,equalsIgnoreCase)—返回布尔值
五、String截取和替换(substring,replace)
一、API
什么是API文档?——JAVA的葵花宝典
API(Application Programming Interface),应用程序编程接口Java API是一本程序员的字典,是JDK中提供给我们使用的类的说明文档。使用API可以快速的查看类中有哪些成员变量,成员方法和构造方法所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们
怎么用:
顺带说一句lang包无需导包
一个类的构成主要包含什么?
——— 属性(成员变量),构造方法,成员方法
查String类的API帮助文档主要查什么?
二、String类
——可以被共享,字符串是常量,值不可更改
1、String类的构造方法(4个)
目前最简单的方法就是:
String s5=“abc”
- String() 创建一个空的字符串对象
// String() 创建一个空的字符串对象
String s1=new String();//“ ”
- String(String original) 通过参数传递的字符串常量,创建一个新的字符串对象
// String(String original) 通过参数传递的字符串常量,创建一个新的字符串对象
String s2=new String(original:"好好");
- String(char[] value)通过参数传递的字符数组,创建一个新的字符串对象
//String(char[] value)通过参数传递的字符数组,创建一个新的字符串对象
char[] chars = {'a','b','c','1','2','@','中'};
String s3 = new String(chars);
System.out.println(s3);//"abc12@中"
- String(byte[] bytes)通过参数传递的字节数组,查询编码表,创建一个新的字符串对象(简化写法——String s5=“abc”)
/*
String(byte[] bytes)通过参数传递的字节数组,查询编码表,创建一个新的字符串对象
ASCII表:计算机中存储的数字和生活中的文字的对应关系
'a'==>97==>01100001==>存储到计算机中
'A'==>65
'0'==>48
*/
byte[] bytes = {65,66,67,68,69};
String s4 = new String(bytes);
System.out.println(s4);//"ABCDE"
2、String创建对象的区别
- 字符串是常量;它们的值在创建之后不能更改。因为 String 对象是不可变的,所以可以共享。
- 以“ ”方式给出的字符串,只要字符串相同,无论在程序代码中出现几次,在常量池中只有一个对象
- 通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
面试题:
(1)String的面试题:问题下列代码的运行结果是?——true
(2)String的面试题:问题下列代码的运行结果是?
- ”“的字符串之间进行拼接,在编译的时候,就会将"ab"+"c”拼接为“abc“
- 变量字符串进行拼接,代码内部会自动使用new String创建新的 字符串
三、String对象比较(equals,equalsIgnoreCase)—返回布尔值
使用 == 做比较
- 基本类型:比较的是数据值是否相同 10==20 10==10
- 引用类型:比较的是地址值是否相同 0x111==0x222
如果想要比较字符串的内容是否相同,需要使用方法:
(1)equals
——将此字符串与指定对象进行比较,用于比较两个字符串的内容是否相同,区分大小写(登录)
方法原型:
public boolean eauals(String s)
使用:
String s1 = "abc";
String s2 = "abc";
boolean b1 = s1.equals(s2);//区分
(2)equalsIgnoreCase
——用于比较两个字符串的内容是否相同,忽略大小写(验证码)
方法原型:
boolean equalsIgnoreCase(String anotherString)
使用:
System.out.println("b1:"+b1);//b1:true
boolean b4 = s1.equalsIgnoreCase(s2);//不区分
System.out.println("b4:"+b4);//b4:true
#############使用########
String s1 = "abc";
String s2 = "abc";
boolean b1 = s1.equals(s2);
System.out.println("b1:"+b1);//b1:true
boolean b4 = s1.equalsIgnoreCase(s2);
System.out.println("b4:"+b4);//b4:true
四、String的遍历( charAt,length())
——依次打印字符串中的每一个字符
1、charAt:索引处的值
——返回指定索引处的char值:(字符串的索引也是从0开始的)
方法原型:
public char charAt(int index):
使用:
String str = "你若安好,便是晴天!";
System.out.println(str.charAt(0));//'你’
2、length():字符串长度
—— 返回此字符串的长度:(数组是arr.length—没有括号)
方法原型:
public int length( ) :
使用
str.length();//
############使用########
//数组遍历
/*int[] arr = {1,2,3,4,5};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}*/
String str = "你若安好,便是晴天!";
//索引 0 1 2 3 4 5 6 7 8 9
System.out.println(str.charAt(0));//'你'
System.out.println(str.charAt(1));//'若'
System.out.println(str.charAt(2));//'安'
System.out.println(str.charAt(3));//'好'
System.out.println(str.charAt(4));//','
System.out.println(str.charAt(10));//StringIndexOutOfBoundsException:
String index out of range: 10
System.out.println(str.length());//10
System.out.println("----------------------------------------");
for (int i = 0; i < str.length(); i++) {
//获取字符串中的每一个字符
char c = str.charAt(i);
System.out.println(c);
sc.nextLine()======>获取一行字符串
sc.next()=======>无法获取空格后的字符串
nextInt()和nextLine()一起用有冲突
########统计字符次数案例###########
/*
统计字符次数案例(重点)
需求:”abcAAAdsafasd1sd11AA@@#@@@A”
键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数
(不考虑其他字符)
思路:
1. 键盘录入一个字符串,用 Scanner 实现
2. 要统计三种类型的字符个数,需定义三个统计变量,初始值都为0
int c1=0; int c2=0; int c3=0;
3. 遍历字符串,得到每一个字符
4. 判断该字符属于哪种类型,然后对应类型的统计变量+1
大写字母:ch>='A' && ch<='Z’ ch>=65 && ch<=90
小写字母:ch>='a' && ch<='z’
数字 : ch>='0' && ch<='9‘
5. 循环结束,输出三种类型的字符个数
*/
//1. 键盘录入一个字符串,用 Scanner 实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.nextLine();
System.out.println(str);
//2. 要统计三种类型的字符个数,需定义三个统计变量,初始值都为0
8.字符串拼接案例
定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,
并在控制台输出结果。例如,数组为 int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]
int c1=0;
int c2=0;
int c3=0;
int c4=0;
//3. 遍历字符串,得到每一个字符
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
//4. 判断该字符属于哪种类型,然后对应类型的统计变量+1
if(ch>='A'&&ch<='Z'){ //byte,short,char在参与计算时,会把自己提升为int类型
if(97>=65 && 97<=90){}
c1++;
}else if(ch>='a'&&ch<='z'){
c2++;
}else if(ch>='0'&&ch<='9'){
c3++;
}else{
c4++;
}
}
//5. 循环结束,输出三种类型的字符个数
System.out.println("字符串中大写字符有:"+c1+"个");
System.out.println("字符串中小写字符有:"+c2+"个");
System.out.println("字符串中数字字符有:"+c3+"个");
System.out.println("字符串中其他字符有:"+c4+"个");
########验证码案例###########
/*
需求:
1.生成一个5位的随机验证码
验证码的取值范围:所有大写字母,小写字母和数字
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
例如: String code = "AX1a2";
2.使用Scanner获取用户输入的验证码
3.比较用户输入的验证码和随机产生的是否相同(忽略大小写)
相同:打印"验证码输入正确"
不同:打印"验证码输入有误"
*/
public static void main(String[] args) {
// 1、定义字符串
String str="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
// 2、定义Random获取str中的随机数
Random num=new Random();
String count="";
// 3、使用for循环获取系统生成的随机验证码
for (int i = 0; i < 5; i++) {
// (1)定义一个num用于获取索引数 方法:str.length())
int index=num.nextInt(str.length());
// (2)用该索引获取str对应的值 方法:charAt
// (3)用一个空字符串接收
count+=str.charAt(index);
}
System.out.println("验证码为:"+count);
System.out.println("请输入验证码:");
// 4、使用Scanner获取用户输入的验证码
Scanner sc=new Scanner(System.in);
String count1=sc.next();
// 5、用equalsIgnoreCase()来区分验证码是否相同,用b来接受返回的boolean值
boolean b=count1.equalsIgnoreCase(count);
// 相同:打印"验证码输入正确"
if(b==true){
System.out.println("验证码输入正确");
}
// 不同:打印"验证码输入有误"
else {
System.out.println("验证码输入有误");
}
}
}
五、String截取和替换(substring,replace)
1、substring:截取
(1) beginIndex
——从beginIndex开始截取字符串到字符串结尾,得到新的字符串并返回0
方法原型:
String substring(int beginIndex)
使用:
String str = "abcde";
String s1 = str.substring(1);//"bcde"
String s2 = str.substring(3);//"de"
(2)beginIndex,endIndex
——从beginIndex索引位置开始截取,截取到endIndex索引位置,得到新字符串并返回(包含头,不包含尾)
方法原型:
String substring(int beginIndex, int endIndex)
使用:
String s3 = str.substring(1,3);//"bc"
2、replace:替换
——将当前字符串中的target (旧值 )内容,使用replacement (新值) 进行替换,返回新的字符串
方法原型:
String replace(String target, String replacement)
使用
String s4 = str.replace("cd","@_@");//"ab@_@e"
########截取和替换#########
public static void main(String[] args) {
String str = "键盘敲碎,月薪过万,迎娶白富美,走向人生巅峰!";
//需求:把字符串中的"走向人生巅峰!"截取出来,并打印
String s1 = str.substring(16);
System.out.println(s1);//走向人生巅峰!
//需求:把字符串中的"月薪过万"截取出来,并打印
String s2 = str.substring(5, 9);
System.out.println(s2);//月薪过万
//需求:把字符串中的"白富美",替换为"***".并打印
String s3 = str.replace("白富美", "***");
System.out.println(s3);//键盘敲碎,月薪过万,迎娶***,走向人生巅峰!
六、其他方法
1、concat:连接,拼接
——将当前字符串与参数字符串进行"拼接",返回一个新字符串
方法原型:
public String concat (String str)
使用:
"aa".concat("bb")==>"aabb" "aa"+"bb"==>"aabb"
注意:
- concat方法拼接的速度快
- concat只能用于字符串拼接,+可以拼接任意的内容
//链式编程:如果方法的返回值还是一个字符串,可以使用返回的字符串继续调用方法
/*
String s4 = s1.concat(s2).concat("呵呵").concat("哈哈").concat("嘿嘿");
System.out.println(s4);//aabb呵呵哈哈嘿嘿
*/
2、contains:包含(返回布尔值)
——判断参数字符串在当前字符串中是否存在(区分大小写)。存在,返回true,否则,返回false。
方法原型:
public boolean contains (String s)
使用:
str.contains("我好");
/*
String str = "你好,我好,大家好,Hello";
boolean b1 = str.contains("我好");
System.out.println("b1:"+b1);//b1:true
boolean b2 = str.contains("hello");
System.out.println("b2:"+b2);//b2:false
*/
#########是否包含@符号和.符号########
/*需求:
请用户从控制台输入一个“Email地址” 1312312@qq.com zhagsan@163.com
判断此Email地址中是否包含@符号和.符号 if(str.contains("@" &&
str.contains("."))){}
如果全部包含,打印:合法,否则打印:不合法的Email地址。
*/
public class Demo03Test {
public static void main(String[] args) {
//请用户从控制台输入一个“Email地址”
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的邮箱地址:");
String email = sc.next();
//判断此Email地址中是否包含@符号和.符号
if(email.contains("@") && email.contains(".")){
System.out.println("合法的Email地址");
}else{
System.out.println("不合法的Email地址");
}
3、endsWith、startsWith(返回布尔值)
(1)endsWith(以什么结尾)
——测试此字符串是否以指定的后缀结尾(区分大小写)
方法原型:
public boolean endsWith(String suffix)
使用:
String str = "hello,你好,嘿嘿";
str.endsWith("嘿嘿"));//true
(2)startsWith(以什么开头)
——测试此字符串是否以指定的前缀开始(区分大小写)
方法原型:
public boolean startsWith(String prefix)
使用:
str.startsWith("张三"));//false
/*
String str = "hello,你好,嘿嘿";
System.out.println(str.endsWith("嘿嘿"));//true
System.out.println(str.endsWith("呵呵"));//false
System.out.println(str.startsWith("张三"));//false
System.out.println(str.startsWith("hello"));//true
*/
####判断用户名,是否姓张####
//需求:判断用户名,是否姓张
System.out.println("张三".startsWith("张"));//true
System.out.println("李三".startsWith("张"));//false
System.out.println("张三".charAt(0)=='张');//true
System.out.println("李三".charAt(0)=='张');//false
4、indexOf、lastIndexOf
(1)indexOf(从前往后查找字符串)
——功能:返回参数字符串在当前字符串中第一次出现的索引,如果不包含,则返回-1
方法原型:
public int indexOf(String str)
(2)lastIndexOf(从后往前查找字符串)
方法原型:
public int lastIndexOf(String str)】
——功能:返回参数字符串在当前字符串中最后一次出现的索引。 如果不包含,则返回-1.
//需求:判断用户名,是否姓张
String str = "你好abc,我好abc,大家好abc";
//需求:在字符串中查找"abc"这个字符串的索引
System.out.println(str.indexOf("abc"));//2
System.out.println(str.lastIndexOf("abc"));//15
5、toCharArray、getBytes
(1)toCharArray(字符串转换为字符数组)
——字符串转换为字符数组
String str = "abc";
char[] chars = str.toCharArray();//{'a','b','c'}
(2)getBytes(字符串转换字节数组)
——字符串查询编码表转换字节数组
byte[] bytes = str.getBytes();//{97,98,99}
6、toLowerCase、toUpperCase
(1)toLowerCase:转换为小写字符串
——把字符串中所有的英文字符转换为小写
"ABC123你好"==>"abc123你好"
String str = "abcHELLOHeHe中国12312";
String s1 = str.toLowerCase();
System.out.println(s1);//abchellohehe中国12312
(2)toUpperCase:转换为大写字符串
——把字符串中所有的英文字符转换为大写
"ABC123你好"==>"abc123你好"
String s2 = str.toUpperCase();
System.out.println(s2);//ABCHELLOHEHE中国12312
7、trim:去掉字符串两端空格
——可用于用户登录
8、split:切割
String str=“张三,20,男”
String [ ] arr=str.split(",");
for(int i=0;i<arr.lrngth;i++)
sout(arr);//“
张三
20
男