
字符串相关的习题分享,随着学习的深入,应该要多做一些习题来巩固知识点,而不是一味的去学习新的东西。这几天尽可能地去给大家分享一些常用的方法及习题的讲解,希望大家认真观看,每一道题都有对应的分析。基础不好的小伙伴可以先看看基础篇。
java字符串练习基础篇

链式编程(Chaining)是一种编程风格,通常用于使代码更加简洁和易读。在Java中,链式编程通常与构建器模式(Builder Pattern)结合使用,这种模式允许你按照一定的顺序设置对象的属性或调用方法,并且可以在不断调用方法的过程中返回对象本身(this),以便进行后续的方法调用。
假设我们有一个简单的类 Person,具有几个属性:name、age 和 address。我们希望能够通过链式调用来设置这些属性。
public class Person {
private String name;
private int age;
private String address;
// Setter methods with chainable return type
public Person name(String name) {
this.name = name;
return this;
}
public Person age(int age) {
this.age = age;
return this;
}
public Person address(String address) {
this.address = address;
return this;
}
// toString method to print Person details
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", address='" + address + '\'' +
'}';
}
// Example of using chainable setters
public static void main(String[] args) {
Person person = new Person()
.name("Alice")
.age(30)
.address("123 Main St, City");
System.out.println(person);
}
}name(String name)、age(int age) 和 address(String address) 方法返回 Person 类型的对象(即 this),使得可以在调用这些方法后立即调用对象的下一个方法。
main 方法中,我们创建了一个 Person 对象,并通过链式调用的方式设置其属性。首先调用 name() 方法设置名字,然后调用 age() 方法设置年龄,最后调用 address() 方法设置地址。每次调用方法后,返回的是 Person 对象本身,因此可以直接跟随另一个方法调用。
toString() 方法以便打印 Person 对象的详细信息。
this 或者对象本身),以便支持链式调用。
public static void main(String[] args) {
//练习一:金额转换
Scanner sc = new Scanner(System.in);
System.out.println("请输入金额");
int n = sc.nextInt();
String[]str={"零","零","零","零","零","零","零"};
int count=7;
if(n<=0 || n>=9999999){
System.out.println("输入金额无效");
}else {
while (n > 0) {
count -= 1;
int m = n % 10;
if (m == 1) {
str[count] = "壹";
} else if (m == 2) {
str[count] = "贰";
} else if (m == 3) {
str[count] = "叁";
} else if (m == 4) {
str[count] = "肆";
} else if (m == 5) {
str[count] = "伍";
} else if (m == 6) {
str[count] = "陆";
} else if (m == 7) {
str[count] = "柒";
} else if (m == 8) {
str[count] = "捌";
} else if (m == 9) {
str[count] = "玖";
}
n /= 10;
}
}
System.out.println(str[0]+'佰'+str[1]+'拾'+str[2]+'万'+str[3]+'仟'+str[4]+'佰'+str[5]+'拾'+str[6]+'元');
}str,用于存储金额的中文大写形式。初始值为全是 "零",表示初始情况下金额为零。count 变量初始化为 7,用来作为数组 str 的索引,从后往前填充。n 小于等于 0 或者大于等于 9999999,则输出 "输入金额无效"。while 循环对输入的金额 n 进行处理,直到 n 变为 0。n 的个位数 m,并根据 m 的值从 1 到 9,将对应的中文大写数字存入数组 str 中。str 数组的元素以 "佰拾万仟佰拾元" 的格式输出。public static void main(String[] args) {
//练习二:手机号屏蔽
Scanner sc = new Scanner(System.in);
System.out.println("请输入手机号");
String s = sc.next();
String begin = s.substring(0, 3);
String end = s.substring(7);
System.out.println(begin+"****"+end);
}substring 方法从字符串 s 中提取出前三位和后四位,分别存储在 begin 和 end 变量中。begin = s.substring(0, 3):截取从索引 0 到索引 3(不包含)的子字符串,即手机号的前三位。end = s.substring(7):截取从索引 7 到字符串末尾的子字符串,即手机号的最后四位。println 方法将屏蔽后的手机号输出,中间四位用 **** 代替。public static void main(String[] args) {
//练习三:身份证信息查看
Scanner sc = new Scanner(System.in);
System.out.println("请输入身份证号码");
String s = sc.next();
System.out.println("您的信息为:");
System.out.println("出生年月日:"+s.substring(6,10)+"年"+s.substring(10,12)+"月"+s.substring(12,14)+"日");
char s1 = s.charAt(16);
if(s1=='1'){
System.out.println("性别为:"+"男");
}else{
System.out.println("性别为:"+"女");
}
}substring 方法从身份证号码中提取出出生年月日: s.substring(6, 10):提取从索引 6 到索引 10(不包含)的子字符串,即出生年份。s.substring(10, 12):提取从索引 10 到索引 12(不包含)的子字符串,即出生月份。s.substring(12, 14):提取从索引 12 到索引 14(不包含)的子字符串,即出生日。charAt 方法提取身份证号码中的第 17 位字符,这一位表示性别:s.charAt(16) 是 '1',则性别为男性。println 方法将出生日期和性别信息分别打印输出。public static void main(String[] args) {
//练习四:敏感词替换
String talk = "你玩的很好,以后别再玩了,TMD";
//敏感词
String[] arr={"TMD","CNM","SB","MLGB"};
for (int i = 0; i < arr.length; i++) {
talk = talk.replace(arr[i],"***");
}
System.out.println(talk);
}String talk = "你玩的很好,以后别再玩了,TMD";:定义了一个包含敏感词的字符串 talk。String[] arr = {"TMD", "CNM", "SB", "MLGB"};:定义了一个包含多个敏感词的字符串数组 arr。for 循环遍历敏感词数组 arr 中的每个敏感词。String.replace() 方法将 talk 字符串中的每个敏感词替换为 ***。talk 中包含敏感词,则将其全部替换为 ***。System.out.println(talk); 将替换后的结果输出到控制台。public static void main(String[] args) {
//练习五:对称字符串
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String s = sc.next();
String result = new StringBuilder(s).reverse().toString();
if(result.equals(s)){
System.out.println("该字符串是对称的");
}else{
System.out.println("该字符串不对称");
}
}Scanner sc = new Scanner(System.in);:创建了一个 Scanner 对象 sc,用于从标准输入(键盘)读取用户输入。System.out.println("请输入一个字符串");:打印提示信息,提示用户输入一个字符串。String s = sc.next();:通过 sc.next() 方法获取用户输入的字符串并存储在变量 s 中。String result = new StringBuilder(s).reverse().toString();:通过 StringBuilder 将字符串 s 反转,并将反转后的结果转换为字符串并赋给 result 变量。if(result.equals(s)) { ... } else { ... }:使用 equals() 方法比较 result 和原始字符串 s 是否相等。 result.equals(s)),则输出 "该字符串是对称的"。"该字符串不对称"。main 方法):public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println(arrToString(arr));
}arr,包含元素 {1, 2, 3}。arrToString(arr) 方法将数组转换为字符串并打印输出。arrToString 方法):public static String arrToString(int[] arr){
StringBuilder str = new StringBuilder();
str.append("["); // 添加字符串开头的 [
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
str.append(arr[i]); // 如果是数组最后一个元素,则直接添加元素值
} else {
str.append(arr[i] + ","); // 如果不是最后一个元素,添加元素值后跟逗号
}
}
str.append("]"); // 添加字符串结尾的 ]
return str.toString(); // 将 StringBuilder 转换为普通的字符串并返回
}StringBuilder 对象 str,用于构建最终的字符串。[,表示数组的开始。for 循环遍历整数数组 arr: i == arr.length - 1),则直接将元素值添加到 StringBuilder 中。, 后添加到 StringBuilder 中。],表示数组的结束。str.toString() 方法将 StringBuilder 转换为普通的字符串并返回。