蓝桥杯试题:串的处理
活动发起人@小虚竹 想对你说:
这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧!我们一起发掘写作的魅力,书写出属于我们的故事。我们诚挚邀请你参加为期14天的创作挑战赛!
提醒:在发布作品前,请将不需要的内容删除。
一、题目描述
在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
-
把每个单词的首字母变为大写。
-
把数字与字母之间用下划线字符(_)分开,使得更清晰
-
把单词中间有多个空格的调整为 1 个空格。
输入描述
用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由 1 个或多个空格分隔。假设用户输入的串长度不超过 200 个字符。
输出描述
输出处理好的字符串。
输入输出样例
示例
you and me what cpp2005program
输出
You And Me What Cpp_2005_program
二、代码展示
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
char[] c = str.toCharArray();
int n = c.length;
StringBuilder st = new StringBuilder();
boolean isNewWord = true; // 标记是否为新单词的开始
for (int i = 0; i < n; i++) {
char x = c[i];
if (x >= 'a' && x <= 'z') {
if (isNewWord) {
x = Character.toUpperCase(x);
isNewWord = false;
}
st.append(x);
} else if (x == ' ') {
if (!isNewWord) { // 只有在不是新单词开始时才添加空格
st.append(x);
isNewWord = true; // 下一个非空格字符将是新单词的开始
}
} else if (x >= '0' && x <= '9') {
if (i > 0 && c[i - 1] >= 'a' && c[i - 1] <= 'z') {
st.append('_');
}
st.append(x);
isNewWord = true; // 数字后可能是新单词的开始
} else {
// 处理其他字符(根据需求,可以选择忽略或处理)
st.append(x);
isNewWord = true;
}
}
System.out.println(st.toString());
}
}