目录
1、String的构造方法
public class StringTest {
public static void main(String[] args) {
//1、使用直接赋值的方式获取到一个字符串对象
String s1 = "我";
String s2 = "晓";
String s3 = s1 + s2 ;
System.out.println(s3 + "!");
//2、使用new的方式来获取一个字符串的对象
//空参构造:获取一个空白的字符串对象
String S1 = new String();
System.out.println("@" + S1 + "!");
//3、有参构造
//p:传递一个字符串,根据传递的字符串再创建一个新的字符串对象!
String S2 = new String("xh");
System.out.println(S2);
//传递一个字符串数组。根据字符数组的内容在创建一个新的字符串对象
//需求:我想修改字符串的内容。abc ——> qbc
//abc --> {'a','b','c'} --> {'q','b','c'} --> qbc
char[] c1 = {'a','b','c'};
String C1 = new String(c1);
System.out.println(C1);
//传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象
//应用场景:在网路传输中的数据都是字节信息。
//一般把字节信息进行转换,转换成字符。而此时就会用到这个构造。
byte[] b1 = {97,98,99,100}; //把这些数字转换成ascii码值,再进行拼接。
String B1 = new String(b1);
System.out.println(B1);
}
}
2、String内存模型
3、字符串的比较
public class StringDemo {
public static void main(String[] args) {
//1、创建两个字符串对象
String s1 = "abc";
String s2 = new String("Abc");
//2、==号的比较
//如果是基本数据类型,比的是数据值
//如果是引用数据类型,比的就是地址值
System.out.println(s1 == s2); //false
//3、比较字符串对象的内容是否相等
Boolean result1 = s1.equals(s2); //equals比较的对象要完全一样。
System.out.println(result1); //false
//4、比较字符串对象的内容是否相等,忽略大小写。
//1 一 这不行 只涉及英文
Boolean result2 = s1.equalsIgnoreCase(s2);
System.out.println(result2); //true
}
}
4、字符串的练习
1、用户登录系统
import java.util.Scanner;
public class StringDemo3 {
public static void main(String[] args) {
//读题拆解法
//定义两个变量记录正确的用户名和密码
String rightUsername = "晓红";
String rightPassword = "521";
//键盘录入
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
//键盘录入用户名和密码
System.out.println("请输入用户名:");
String username = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
//比较
int count = 3;
if (username.equals(rightUsername) && password.equals(rightPassword)) {
System.out.println("用户登录成功!");
break;
} else {
if (i == 2){
//tips 提示最后一次机会!
System.out.println("账号" + username + "被锁定,请联系汝祥来解锁!");
}else{
System.out.println("用户登录失败,用户名或密码错误!您还剩下" + (2 - i) + "次机会!");
}
}
}
}
}
2、遍历字符串
import java.util.Scanner;
public class StringDemo4 {
public static void main(String[] args) {
//键盘录入字符串
Scanner sc = new Scanner(System.in);
//tips
System.out.println("请输入一个字符串");
String s1 = sc.next();
//遍历
for (int i = 0; i < s1.length(); i++) {
// i 依次表示字符串的每一个索引
char c = s1.charAt(i);
//charAt是一个字符串类(String)的方法;
//用于获取指定位置的字符。它接受一个参数,该参数表示要从字符串中获取字符的索引位置。
//索引从0开始,表示字符串中的第一个字符。通过使用charAt方法,您可以检索到字符串中任何位置的特定字符。
//例如:
//String str = "Hello, World!";
//char ch = str.charAt(7);
//System.out.println(ch);
System.out.println(c);
}
}
}
3、统计字符次数
import java.util.Scanner;
public class StringDemo5 {
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 numberCount = 0;
for (int i = 0; i < str.length(); i++) {
// i 依次表示字符串中每一个索引
char c = str.charAt(i);
if(c >= 'a' && c < 'z'){
//char类型的变量在参与计算的时候自动提升为int,查询ascii码表。
smallCount++;
}else if(c >= 'A' && c <= 'Z'){
bigCount++;
}else if(c >= '0' && c <= '9'){
numberCount++;
}
}
//输出打印
System.out.println("小写字母有" + smallCount + "个");
System.out.println("大写字母有" + bigCount + "个");
System.out.println("数字符号有" + numberCount + "个");
}
}
4、拼接字符串
public class StringDemo6 {
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 "[]";
}
//当代码执行到这表示什么?
//表示数组不是null,长度也不为0
String result = "[";
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;
}
}
5、字符串的反转
import java.util.Scanner;
public class StringDemo7 {
public static void main(String[] args) {
//键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();
//调用
String s1 = reverser(str);
System.out.println(s1);
}
//我要干嘛? -- 将字符串倒着
//我干这件事需要什么? --索引数据。将数据重新赋值给变量
//做完之后,是否需要返回
//调用处是否需要继续使用方法的结果呢?
public static String reverser(String str) {
//abc --> cba
String result = "";
for (int i = str.length() - 1; i >= 0; i--) {
//i 表示字符串中的每一个索引(倒着的)
char c = str.charAt(i);
result = result + c;
}
return result;
}
}
6、金额转换
import java.util.Scanner;
public class StringDemo8 {
public static void main(String[] args) {
//1. 键盘录入金额
Scanner sc = new Scanner(System.in);
int money; // 用于存储金额的变量
while (true) {
System.out.println("请录入一个金额");
money = sc.nextInt();
// 判断金额是否在有效范围内
if (money >= 0 && money <= 9999999) {
break;
} else {
System.out.println("金额无效!");
}
}
//2. 定义一个变量来表示钱的大写
String moneyStr = "";
//3. 得到money里面的每一个数字
while (true) {
// 从右往左获取数字,因为右侧是数字的个位
int ge = money % 10; // 取余,得到个位数
//4. 调用方法将数字转换为大写的中文数字
String n1 = getNumber(ge);
// 将转换后的大写数字拼接到moneyStr的前面
moneyStr = n1 + moneyStr;
// 去掉刚才获取到的数字
money = money / 10;
// 如果数字上的每一个数字全部获取到了,那么money记录的就是0,此时循环就结束。
if (money == 0) {
break;
}
}
//5. 在前面补零,补齐七位
int count = 7 - moneyStr.length(); // 需要补零的个数
for (int i = 0; i < count; i++) {
moneyStr = "零" + moneyStr;
}
System.out.println(moneyStr);
//6. 插入单位
String[] arr = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
String result = ""; // 存储最终的结果
for (int i = 0; i < moneyStr.length(); i++) {
char c = moneyStr.charAt(i);
result = result + c + arr[i];
}
System.out.println(result);
}
// 定义一个方法,将数字转换为大写的中文数字
public static String getNumber(int number) {
// 定义数组,存储大写的中文数字
String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
// 返回结果
return arr[number];
}
}
7、手机号屏蔽 *
在Java中,可以使用 substring() 方法来截取字符串的子串。substring() 方法有两种重载形式,可以根据起始位置和结束位置或者只根据起始位置来截取子串。
public class StringDemo9 {
public static void main(String[] args) {
//1、获取一个手机号码
String phoneNumber = "17682973508";
//2、截取手机号的前面三
String p1 = phoneNumber.substring(0,3);
//System.out.println(p1);
//3、截取手机号码后四位
String p2 = phoneNumber.substring(7);//从第七位开始往后进行截取
//System.out.println(p2);
//4、拼接
String result = p1 + "****" + p2;
System.out.println(result);
}
}
8、身份证信息查看
public class StringDemo10 {
public static void main(String[] args) {
//1、定义一个字符串用来记录身份证号码
String id = "341623200306193750";
//2、获取出生年月日
String year = id.substring(6,10);
String month = id.substring(10,12);
String day = id.substring(12,14);
//3、获取性别
char gender = id.charAt(16); // '5'
//利用ascii码表进行转换
//gender会转换成ascii值 '5' -- 53 '0' -- 48
int num = gender - 48;
//System.out.println(num);
//进行奇偶判断
if (num % 2 == 0){
System.out.println("性别为:女");
}else{
System.out.println("性别为:男");
}
}
}
9、敏感词替换
在Java中,你可以使用 replace() 方法来替换字符串中的特定字符或子串。这个方法接受两个参数:要替换的目标字符串和用于替换的新字符串。
public class StringDemo11 {
public static void main(String[] args) {
//1、获取到说的话。
String talk = "你玩的真好,下次不要玩了,TMD,SB!";
//2.1 定义一个敏感词库
String[] arr = {"TMD","CNM","MLGB","SB","NM"};
//2.2 循环得到数组中的每一个敏感词,依次进行替换。
for (int i = 0; i < arr.length; i++) {
talk = talk.replace(arr[i],"***");
}
//2.3 把话语中的TMD替换为***
System.out.println(talk);
}
}
java的学习需要很长时间的磨练。不能急于求成!
5、StringBuilder
1、概念及练习
public class StringBuilderDemo1 {
public static void main(String[] args) {
//1、创建对象
StringBuilder sb = new StringBuilder("123");
//2、添加元素
//sb.append(1);
//sb.append(1.2);
//sb.append(true);
//反转
sb.reverse();
//获取长度
int l1 = sb.length();
System.out.println(l1);
//打印操作
System.out.println(sb);
//3、再把StringBuilder变回字符串
String str = sb.toString();
System.out.println(sb);
}
}
2、链式编程思想
public class StringBuilderDemo1 {
public static void main(String[] args) {
//1、创建对象
StringBuilder sb = new StringBuilder();
//2、添加元素
sb.append("aaa").append("bbb").append("ccc").append("ddd");
//3、再把StringBuilder变回字符串
String str = sb.toString();
System.out.println(sb);
}
}
3、小练习
对称字符串
import java.util.Scanner;
public class StringBuilderDemo2 {
public static void main(String[] args) {
//1、键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.next();
//翻转键盘录入的内容
//StringBuilder sb = new StringBuilder();
//sb.append(str);
//sb.reverse();
//System.out.println(sb);
//第二种方法 链式编程思想
String result = new StringBuilder().append(str).reverse().toString();
System.out.println(result);
//比较
if (str.equals(result)){ //拿str和result进行比较
System.out.println("当前字符串是对称的!");
}else {
System.out.println("当前字符串是不对称的!");
}
}
}
拼接字符串
public class StringBuilderDemo3 {
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) {
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(", ");
}
}
sb.append("]");
return sb.toString();
}
}
6、StringJoiner
1、概念
import java.util.StringJoiner;
public class StringJoinerDemo1 {
public static void main(String[] args) {
//1、创建一个对象,并指定中间的间隔符号。
StringJoiner sj = new StringJoiner("---");
//2、添加元素
sj.add("aaa").add("bbb").add("ccc").add("ddd");
//3、打印结果
System.out.println(sj);//aaa---bbb---ccc---ddd
}
}