基于字符串的专项实验
2.1 验证性实验
1、调试下面的程序,分析程序的功能和运行结果并添加代码注释。
import java.util.Scanner; public class LetterCount { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个字符串:"); String str = scanner.nextLine(); int count = 0; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (Character.isLetter(c)) { // 判断是否为字母 count++; } } System.out.println("字符串中字母的个数为:" + count); scanner.close(); } } |
2、调试下面的程序,并分析程序的功能和运行结果并添加代码注释。
public class EmailHandler { public static void main(String[] args) { String email = "zhangmj@zparkhr.com"; int atIndex = email.indexOf('@'); if (atIndex != -1) { String username = email.substring(0, atIndex); System.out.println("邮箱用户名:" + username); } else { System.out.println("邮箱格式错误,无@符号"); }
boolean hasAt = email.contains("@"); boolean hasDot = email.contains("."); int lastDotIndex = email.lastIndexOf('.'); boolean isDotAfterAt = hasAt && hasDot && (lastDotIndex > atIndex);
if (hasAt && hasDot && isDotAfterAt) { System.out.println("邮箱格式合法"); } else { System.out.println("邮箱格式不合法"); } } } |
3、调试下面的程序,并分析程序的功能和运行结果并添加代码注释。
import java.util.Random; public class RandomCharPicker { public static void main(String[] args) { String source = "ABCDEFGhijklmn1234567"; Random random = new Random(); StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) { // 生成0到字符串长度-1的随机索引 int index = random.nextInt(source.length()); char c = source.charAt(index); sb.append(c); // 拼接字符 }
System.out.println("随机拼接的字符串:" + sb.toString()); } } |
4、调试下面的程序,并分析程序的功能和运行结果并添加代码注释。
import java.util.Scanner; public class StringReverse { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个字符串:"); String str = scanner.nextLine(); StringBuilder sb = new StringBuilder(str); String reversedStr = sb.reverse().toString(); // 利用StringBuilder的reverse方法 System.out.println("反转后的字符串:" + reversedStr); scanner.close(); } } |
5、调试下面的程序,并分析程序的功能和运行结果并添加代码注释。
public class DigitCount { public static void main(String[] args) { String digitStr = "1239586838923173478943890234092"; int[] counts = new int[10]; // 索引0-9对应数字0-9的次数 for (int i = 0; i < digitStr.length(); i++) { char c = digitStr.charAt(i); int digit = c - '0'; counts[digit]++; }
for (int i = 0; i < counts.length; i++) { System.out.println("数字" + i + "出现的次数:" + counts[i]); } } } |
6、调试下面的程序,并分析程序的功能和运行结果并添加代码注释。
import java.util.Scanner; public class CharReplace { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入字符串:"); String str = scanner.nextLine(); System.out.print("请输入要替换的字符:"); char oldChar = scanner.next().charAt(0); System.out.print("请输入替换后的字符:"); char newChar = scanner.next().charAt(0);
StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == oldChar) { sb.append(newChar); } else { sb.append(c); } }
System.out.println("替换后的字符串:" + sb.toString()); scanner.close(); } } |
2.2 自主设计性实验
7、编程字符串中单词个数统计。要求:输入一个英文句子(单词之间用空格分隔,标点符号与单词相连,如 “Hello, world! This is a test.”),统计句子中单词的个数(忽略标点符号,仅以空格分隔判断单词)。
提示:可先去除字符串中的标点符号,再以空格分割字符串,统计非空元素的个数。
Scanner输入中 nextLine() 方法可以接受输入空格!
8、编程实现手机号格式校验与处理。要求:设计程序实现手机号的格式校验,规则如下:
(1)长度为 11 位;
(2)以 1 开头;
(3)第二位为 3、4、5、7、8 中的一个。
校验通过后,将号码中间 4 位替换为 “xxxx”(如 “13812345678” 处理为 “138xxx5678”)。
9、编程实现字符串中最长连续相同字符统计。要求:输入一个字符串,找出其中最长的连续相同字符及其长度。例如,字符串 “aabbbccddddd” 中,最长连续字符为 “d”,长度为 5。
10、编程实现两个字符串的公共前缀查找。要求:输入两个字符串,查找它们的最长公共前缀。例如,“flower” 和 “flow” 的公共前缀为 “flow”;“dog” 和 “racecar” 的公共前缀为 “”(空字符串)。
11、编程实现密码强度检测。要求:设计程序检测密码强度,规则如下:
(1)长度≥8 位;
(2)包含大小写字母、数字、特殊符号(如!@#$%)中的至少三种;
满足以上条件为 “强密码”,仅满足(1)为 “中密码”,否则为 “弱密码”。输入密码后,输出对应的强度等级。
12、编程实现字符串编码转换。要求:实现字符串的简单编码转换,规则为:将每个字符的 ASCII 值加 3 后转换为新字符(如 'a'→'d','5'→'8'),编码后的字符串需保留原字符串的长度和格式。编写解码方法,将编码后的字符串还原为原字符串。
