字符串学习内容:
String、StringBuilder、StringJonier、StringBuffer、Pattern、Matcher
创建String对象的两种方式:
- 直接赋值
- New
//1.直接赋值获取一个字符串对象
String s1 = "abc";
System.out.println(s1);
//2.使用new的方式来获取一个字符串对象
//传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
//需求:我需要修改字符串的内容。 abc Qbc
//abc --> {'a','b','c'} --> {'Q','b','c'} -->Qbc
char [] chs = {'a','b','c'};
String s4 = new String(chs);
System.out.println(s4); //abc
//传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象
//应用场景:以后在网络当中传输的数据其实都是字节信息
//我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造了
byte [] bytes = {97,98,99,100};
String s5 = new String(bytes);
System.out.println(s5);
字符串比较:
- boolean equals(要比较的字符串) 完全一样结果才是true,否则为false
- boolean equalslgnoreCase(要比较的字符串) 忽略大小写的比较
package net.dqsy;
public class StringDemo_2 {
public static void main(String[] args) {
//1.创建两个字符串对象
String s1 = new String("abc");
String s2 = "Abc";
//2. == 号比较
//基本数据类型:比的是数据值
//引用数据类型:比的是地址值
System.out.println(s1 == s2); //false
//3.比较字符串对象中的内容是否相等
boolean result1 = s1.equals(s2);
System.out.println(result1); //false
//4.比较字符串对象中的内容是否相等,忽略大小写
boolean result2 = s1.equalsIgnoreCase(s2);
System.out.println(result2); //true
}
}
String
练习4:用户登录
已知正确的用户名和密码,请用程序实现模拟用户登录
总共给出三次机会,登录之后,给出相应的提示
package net.dqsy;
import java.util.Scanner;
public class StringDemo_4 {
public static void main(String[] args) {
//练习:
//已知正确的用户名和密码,请用程序实现模拟用户登录
//总共给出三次机会,登录之后,给出相应的提示
//读题拆解法
//1.定义两个变量,记录"正确的用户名和密码"
String rightUsername = "zhangxihe";
String rightPassword = "050503";
Scanner sc = new Scanner(System.in);
//2.键盘录入,用户名和密码 "程序实现模拟用户登录"
for (int i = 0 ; i < 3 ; i++ ) { //0 1 2
System.out.println("请输入用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
//3.比较
if(username.equals(rightUsername) && password.equals(rightPassword)){
System.out.println("用户登录成功!");
break; //跳出循环
}else{
if(i == 2){//最后一次机会也错误了,此时要提示账号被锁定
System.out.println("账号" + username +"被锁定,请联系工作人员:17304361113");
}else{
System.out.println("用户登录失败,用户名或密码有误,您还剩下" + (2-i) + "次机会");
}
}
}
//4.循环三次
//把重复的内容选中,ctrl + alt +t ,选for循环
//5.提醒剩下有n次机会 //2 1 0
//6.没有机会时,提醒联系工作人员
}
}
练习5:遍历字符串
键盘录入一个字符串,使用程序实现 在控制台遍历该字符串
-
public char charAt(int index) :根据索引返回字符
-
public int length(); :返回此字符串的长度
- 数组的长度: 数组名.length
- 字符串的长度: 字符串对象.length();
-
“钢门123吹小雪 长度:8
package net.dqsy; import java.util.Scanner; public class StringDemo_5 { public static void main(String[] args) { //1.键盘录入一个字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String str = sc.next(); //2.进行遍历 for (int i = 0; i < str.length(); i++) { //快捷键:str.le + 回车 + .fori //i依次表示字符串的每一个索引 char c = str.charAt(i); //快捷键:str.ch System.out.println(c); } } }
练习6:统计字符次数
键盘录入一个字符串,统计该字符串中大写字母字符、小写字母字符、数字字符
出现的次数 (不考虑其他字符)
-
char c = str.charAt(i);
package net.dqsy; import java.util.Scanner; public class StringDemo_6 { public static void main(String[] args) { //1.键盘录入一个字符串 Scanner sc = new Scanner(System.in); System.out.println("请输入一个字符串:"); String str = sc.next(); //2.统计---计数器思想 //定义三个计数器 int bigcount = 0; int smallcount = 0; int numcount = 0; for (int i = 0; i < str.length(); i++) { //i 依次表示字符串中的每一个索引 char c = str.charAt(i); //对c进行判断 if(c >= 'A' && c <= 'Z'){ //char类型的变量在参与计算的时候自动类型提升为int //查询ascii码表 bigcount ++ ; }else if(c >='a' && c <= 'z'){ smallcount ++ ; }else if(c >= '0' && c <= '9'){ numcount ++; } } System.out.println("此字符串中大写字母的个数为:" + bigcount); System.out.println("此字符串中小写字母的个数为:" + smallcount); System.out.println("此字符串中数字的个数为:" + numcount); } }
练习7:拼接字符串
package net.dqsy;
public class StringDemo_7 {
//1.我要干嘛?————遍历数组,把数组拼接成字符串
//2.我干这件事情需要什么才能完成?————数组
//3.我干完了是否需要把结果返回给调用处?————返回一个拼接之后的字符串
//如果调用处需要继续使用,那么必须返回
//如果调用处不需要继续使用,那么可以返回也可以不返回
public static void main(String[] args) {
int [] arr = {1,2,3};
String str = arrToString(arr);
System.out.println(str);
}
public static String arrToString(int [] arr){
if(arr == null){
return "";
}
if(arr.length == 0) {
return "[]";
}
String result = "[";
//当代码执行到这里,表示什么?
//表示数组不是null,也不是长度为0的,它是一个有意义的数组
//快捷键:arr.fori
for (int i = 0; i < arr.length; i++) {
//i是索引 arr[i]是元素
if(i == arr.length-1){ //数组中最后一个元素
result = result + arr[i] ;
}else{
result = result + arr[i] + "," ;
}
}
//此时拼接右括号
result = result + "]";
return result;
//[123
//改写成[1,2,3]
//[1,2,3,]
//最后一个数后不要逗号
}
}
练习8:字符串反转
定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法之后,在控制台输出结果。例如:键盘录入abc,输出结果cba
- 捷径:StringBuilder的reverse方法
- 截图工具Snipaste
- 快捷键 F1
package net.dqsy; public class StringDemo_8 { public static void main(String[] args) { String result = reverser("abc"); System.out.println(result); } //1.实现字符串的反转 //2.键盘录入字符串 //3.需要结果进行输出 public static String reverser(String str){ String result = ""; //abc //倒着遍历 //快捷键:.forr for (int i = str.length()-1; i >= 0; i--) { //i依次表示字符串的每一个索引(倒着的) char c = str.charAt(i); result = result + c; } return result; } }
练习10:手机号屏蔽
需用到的方法:
-
String substring(int beginIndex , int endIndex) 截取 可以把一大段的字符串截取其中的一部分
注意:包头不包尾 包左不包右 (0,2) -> 0 1
只有返回值才是截取的小串
-
String substring(int beginIndex) 截取到末尾
package net.dqsy; public class StringDemo_10 { public static void main(String[] args) { //1.获取一个手机号码 String phoneNumber = "17304361113"; //2.截取前面的三位 String start = phoneNumber.substring(0,3); System.out.println(start); //3.截取后面的四位 String over = phoneNumber.substring(7); System.out.println(over); //4.拼接 String result = start + "****" + over; System.out.println(result); } }
练习11:身份证信息查看
需用到的方法:
- 如何从字符得到数字??
-
ASCII码: ‘0’ ---> 48 ,所以得到的字符-48得到数字
package net.dqsy; public class StringDemo_11 { public static void main(String[] args) { //1.定义一个字符串记录身份证号码 String id = "321802204512281234"; //2.获取出生年月日 7~14位 String year = id.substring(6,10); String month = id.substring(10,12); String day = id.substring(12,14); System.out.println("出生年月日为:"); System.out.println(year + "年" + month + "月" + day + "日"); //3.获取性别 char gender = id.charAt(16); //'3' ---> 3 //或者id.substring(16); //字符变成数字? //利用ASCII码表 //'0'---> 48 int num = gender - 48; if(num % 2 == 0 ){ System.out.println("性别为女"); }else{ System.out.println("性别为男"); } } }
练习12:敏感词替换
需用到的方法:
-
String replace(旧值,新值) 替换
- 注意点:只有返回值才是替换之后的结果
package net.dqsy; public class StringDemo_12 { public static void main(String[] args) { //1.获取到说的话 String talk = "你玩的真好,以后不要再玩了,TMD!CNM~"; //2.定义一个敏感词库 String [] arr = {"TMD","CNM","SB","MLGB"}; //3.循环替换 快捷:arr.fori for (int i = 0; i < arr.length; i++) { talk = talk.replace(arr[i],"***"); } //4.打印结果 System.out.println(talk); } }
StringBuilder概述
当字符串直接拼接100万次,运行速度非常慢。用完StringBuilder刷的一下就完事了
可以看作是一个容器,创建之后里面的内容是可变的
StringBuilder构造方法:
-
public StringBuilder() 空参方法
-
public StringBuilder(String Srt) 有参方法
StringBuilder的常用方法:
-
public StringBuilder append(任意形式) 添加数据
-
public StringBuilder reverse() 反转容器中的内容 abc ---> cba
-
public int length() 返回长度(字符出现的个数) abc ---> 3
-
public String toString() 通过toString()可以实现把StringBuilder(此时还不是字符串,是对象)转换成String(字符串)
package net.dqsy;
public class StringBuilderDemo_3 {
public static void main(String[] args) {
//1.创建对象
StringBuilder sb = new StringBuilder("abc");
//2.添加元素
//快捷键sb.ap
//直接加在已添加的参数后面
/*sb.append(1);
sb.append(2.3);
sb.append(true);*/
//反转
sb.reverse();
//获取长度
int len = sb.length();
System.out.println(len);
//打印
//普及:
//因为StringBuilder是Java已经写好的类
//Java在底层对它做了一些特殊处理
//打印对象不是地址值而是属性值
System.out.println(sb);
}
}
链式编程原理:
-
sb.append("aaa").append("bbb").append("ccc").append("ddd");
练习5:对称字符串
使用StringBuilder的场景:
-
1.字符串的拼接
-
2.字符串的反转
package net.dqsy;
import java.util.Scanner;
public class StringBuilderDemo_5 {
public static void main(String[] args) {
//1.键盘录入一个字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();
//2.反转键盘录入的字符串
String result = new StringBuilder().append(str).reverse().toString();
/*等同于
StringBuilder sb = new StringBuilder(); //创建了新的字符串对象
sb.append(str); //录入字符串
sb.reverse();*/ //反转
System.out.println(result);
//3.比较
if(str.equals(result)){
System.out.println("当前字符串是对称的");
}else{
System.out.println("当前字符串不是对称的");
}
}
}
练习6:拼接字符串
package net.dqsy;
public class StringBuilderDemo_6 {
public static void main(String[] args) {
//1.定义数组
int [] arr = {1,2,3};
//2.调用方法把数组变成字符串
String str = arrToString(arr);
System.out.println(str);
}
public static String arrToString(int [] arr){
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i == arr.length - 1){//i是当前的最后一个元素
sb.append(arr[i]);
}else{
sb.append(arr[i] + ", ");
}
}
sb.append("]");
return sb.toString();
}
}
StringJoiner概述
StringJonier和StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。
作用:提高字符串的效率,而且代码编写的特别简洁,但是目前市场上很少有人用....那就先不写了