例题如下:
在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要
求程序对用户输入的串进行处理。具体规则如下:
1.把每个单词的首字母变为大写。
2.把数字与字母之间用下划线字符()分开,使得更清晰
3.把单词中间有多个空格的调整为1个空格。
输入描述
用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个
单词间由1个或多个空格分隔。假设用户输入的串长度不超过200个字符。
输出描述
输出处理好的字符串。
输入输出样例
示例
输入
you and me what cpp2005program
输出
You And Me What Cpp-2005_program
代码如下:
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String inputString = scan.nextLine();
String processedString = processString(inputString);
System.out.println(processedString);
scan.close();
}
private static String processString(String inputString) {
// 把每个单词的首字母变为大写
String[] words = inputString.split("\\s+");
StringBuilder result = new StringBuilder();
for (String word : words) {
// 处理数字与字母之间用下划线字符分开
word = word.replaceAll("(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)", "_");
// 把单词中间多个空格调整为1个空格
word = word.replaceAll("\\s+", " ");
// 把每个单词的首字母变为大写
if (!word.isEmpty()) {
result.append(Character.toUpperCase(word.charAt(0))).append(word.substring(1)).append(" ");
}
}
// 移除末尾的空格
return result.toString().trim();
}
}
代码解析:
1.nextLine()
是Scanner
类中的方法,它会读取输入的一行文本,并将其作为一个字符串返回。
2.String[] words = inputString.split("\\s+");
这行代码使用了字符串的 split
方法,将 inputString
按照正则表达式 "\\s+" 进行拆分,然后将拆分后的结果存储在一个字符串数组 words
中。
inputString
是之前从用户输入中读取的一行字符串。
split("\\s+")
调用了字符串的 split
方法,该方法接受一个正则表达式作为参数,用于指定分隔符。在这里,正则表达式 "\\s+" 表示一个或多个空格字符(包括空格、制表符等)作为分隔符。
\\s
表示空白字符(whitespace character),包括空格、制表符、换行符等。
+
表示匹配前面的元素一次或多次。
因此,\\s+
表示一个或多个空白字符作为分隔符。
因此,words
数组中存储了 inputString
被空格分隔后的所有单词。
3.StringBuilder
类是 Java 中用于处理可变字符串的类,通常用于拼接大量字符串时,以提高性能。使用 StringBuilder
而不是直接使用 String
是因为在处理大量字符串拼接时,StringBuilder
提供了更高效的方式。StringBuilder
的方法允许你追加、插入、删除和替换字符序列,而不需要创建新的字符串对象。
4.replaceAll
是 Java 中字符串类 (String
) 提供的一个方法,用于替换字符串中的所有匹配子串。该方法接受两个参数:第一个参数是一个正则表达式,用于指定要匹配和替换的模式。第二个参数是一个字符串,用于替换模式匹配的子串。
(?<=\\D)
: 正向后瞻,匹配前面是非数字(非数字字符)的位置。
(?=\\d)
: 正向先行,匹配后面是数字的位置。
合在一起,这个正则表达式匹配的是前面是非数字,后面是数字的位置,即非数字字符与数字字符之间的位置。后面同理
5.在正则表达式中,逻辑“或”使用的是单个竖线 |
,而不是 Java 中常用的逻辑或 ||
。
6.append()
方法是 StringBuilder
和 StringBuffer
类中的方法,用于在字符串构建器对象的末尾追加字符序列(字符串、字符、数字等)。
在 StringBuilder
中,append
方法的签名有多个,可以接受不同类型的参数,例如:
append(String str)
: 将指定的字符串追加到字符串构建器。append(char c)
: 将指定的字符追加到字符串构建器。append(int i)
: 将指定的整数追加到字符串构建器。- ... 等等。
7.toUpperCase()
是 Java 中 String
类和 Character
类提供的方法之一,用于将字符串或字符转换为大写形式。
8.charAt(0)
是 String
类中的方法,用于获取字符串中指定索引位置的字符。在 Java 中,字符串的索引从 0 开始,所以 charAt(0)
返回的是字符串的第一个字符。
9.substring
是 String
类中的方法,用于从一个字符串中提取子字符串。有两种常用的 substring
方法。代码中的方法是从指定的索引位置 beginIndex
开始,截取到字符串的末尾。
10.trim()
是 Java 中 String
类提供的一个方法,用于移除字符串两端的空白字符(whitespace characters)。空白字符包括空格、制表符、换行符等。
以上十个内容基本涵盖本代码的问题。