1. 动态字符串操作
需求:编写一个程序,接收用户输入的多个单词,并将它们组合成一个完整的句子,同时支持以下功能:
- 动态添加单词
- 删除某些单词
- 将句子反转
import java.util.Scanner; public class StringBuilderDemo { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); Scanner scanner = new Scanner(System.in); while (true) { System.out.println("当前句子: " + sb.toString()); System.out.println("选择操作: 1-追加单词, 2-删除单词, 3-反转句子, 4-退出"); int choice = scanner.nextInt(); scanner.nextLine(); // 清除换行符 switch (choice) { case 1: System.out.print("输入要追加的单词: "); String word = scanner.nextLine(); sb.append(word).append(" "); break; case 2: System.out.print("输入要删除的单词: "); String deleteWord = scanner.nextLine(); int start = sb.indexOf(deleteWord); if (start != -1) { sb.delete(start, start + deleteWord.length() + 1); // 删除单词和后面的空格 } else { System.out.println("未找到该单词!"); } break; case 3: sb.reverse(); System.out.println("句子已反转!"); break; case 4: System.out.println("程序退出!"); return; default: System.out.println("无效操作!"); } } } }
相关知识点:
理解 scanner.nextLine()
scanner.nextLine()
的作用是 读取一整行输入并返回字符串。消费换行符.
行为特点
- 它从输入流中读取,直到检测到换行符(
\n
)。 - 换行符本身不会包含在返回值中。
- 如果输入流中只有换行符,会返回一个空字符串。
sb.indexOf(String)
函数
sb.indexOf(String str)
是StringBuilder
类中的一个方法,用于在StringBuilder
对象中查找指定子字符串的起始索引。
方法声明
public int indexOf(String str)
- 返回值:
- 如果找到,返回指定字符串
str
在StringBuilder
中第一次出现的索引。 - 如果没找到,返回
-1
。
- 如果找到,返回指定字符串
2. 模拟字符串压缩
需求:实现一个简单的字符串压缩功能,例如输入 "aaabbbccc"
,输出为 "a3b3c3"
。
代码示例:
public class Main {
public static void main(String[] args) {
String input = "aaabbcc";
StringBuilder stringBuilder = new StringBuilder();//这里用StringBuilder初始化了一个新的数组,初始长度为16,现在为空
int count = 1; // 初始化计数值,需要输出
for (int i = 1; i < input.length(); i++) {
if (input.charAt(i) == input.charAt(i - 1)) {
count++; // 如果当前字符与前一个字符相同,计数值加 1
} else {
// 如果不同,将前一个字符和计数值追加到 StringBuilder
stringBuilder.append(input.charAt(i - 1)).append(count);
count = 1; // 重新开始计数
}
}
// 最后一个字符的处理
stringBuilder.append(input.charAt(input.length() - 1)).append(count);
// 输出压缩后的字符串
System.out.println("Compressed string: " + stringBuilder.toString());
}
}
-
input.charAt(i)
示例:
String input = "hello"; int i = 2; // 当前索引 System.out.println(input.charAt(i)); // 输出 'l' (索引 2 的字符) System.out.println(input.charAt(i - 1)); // 输出 'e' (索引 1 的字符)
charAt
是字符串(String
)的一个方法,用于返回字符串中指定索引位置的字符。i
是一个索引值(从 0 开始),表示获取input
字符串中第i
个字符。
-
input.charAt(i - 1)
- 类似地,这里表示获取字符串中索引为
i - 1
的字符。 - 索引
i - 1
是当前索引的前一个位置
- 类似地,这里表示获取字符串中索引为
3.注意事项
-
i - 1
的边界问题- 如果
i = 0
,i - 1
会变成-1
,这会导致 索引越界异常 (StringIndexOutOfBoundsException
)。 - 因此,
i
的值一般从 1 开始,而不是 0。
- 如果
-
应用场景
- 这个逻辑通常用于检测字符串中相邻的重复字符,比如连续相同字符的统计、压缩字符串等。
3. 字符串回文检测
需求:输入一个字符串,判断其是否是回文(正读和反读相同)。
代码示例:
public class PalindromeChecker {
public static void main(String[] args) {
String input = "madam";
StringBuilder sb = new StringBuilder(input);
if (input.equals(sb.reverse().toString())) {
System.out.println(input + " 是回文!");
} else {
System.out.println(input + " 不是回文!");
}
}
}
注意input需传入stingbuilder类中才能够调用reverse方法.
标签:知识点,String,StringBuilder,练习,System,字符串,input,out From: https://blog.csdn.net/m0_57725730/article/details/145014773