赞
踩
【题目描述】
要求程序对用户输入的字符串进行处理。具体规则如下:
a)把每个单词的首字母变为大写
b)把数字与字母之间用下划线字符 (_)分开,使得更清晰
c)把单词中间有多个空格的调整为1个空格
【输入】
用户输入
you and me what cpp2023program
【输出】
You And Me What Cpp_2023_program
唉,今天面试的时候面试官问我的这道题目,脑子当时太笨了,没答出来,这里还是复盘下,写个博客记录下
思路:
1.首先想到的是先把多余的空格去掉,s.replace("\\s+"," "),其中\s表示任意空白字符
2.然后是解决大小写的问题,这个其实可以用字符串拼接的方式实现,实现就是截取第一个字符,也就是(0,1)然后在+剩余的字符,也就是截取(1)从1的位置开始以后的字符串,这样就行了
3.这块想到的是判断单个字符中是否包含数字,这个包含是用正则表达式去判断的,然后对这个字符串进行char遍历,判断前后字符串是否包含数字或者字母,如果包含的话,就加_,否则不加
代码:
- public static void main(String[] args) {
- String a = "you and me what cpp2023prog3ram";
- //移除多余的空格
- String str1 = a.replaceAll("\\s+", " ");
- StringBuilder sb = new StringBuilder();
- StringBuilder sb2 = new StringBuilder();
- String stringArray[] = str1.split(" ");
- for (int i = 0; i < stringArray.length; i++) {
- String s = stringArray[i];
- Pattern pattern = Pattern.compile("[0-9]+");
- Matcher matcher = pattern.matcher(s);
- if (matcher.find()) {
- //包含数字
- for (int j = 0; j < s.length(); j++) {
- if(j+1<s.length()){
- if ((s.charAt(j) >= 'a' && s.charAt(j) <= 'z' || s.charAt(j) >= 'A' && s.charAt(j) <= 'Z') &&
- (s.charAt(j + 1) >= '0' && s.charAt(j + 1) <= '9')) {
- //前面为字母,后面为数字
- sb2.append(s.charAt(j) + "_");
- } else if ((s.charAt(j) >= '0' && s.charAt(j) <= '9' && s.charAt(j + 1) >= 'a')
- && (s.charAt(j + 1) <= 'z' || s.charAt(j + 1) >= 'A' && s.charAt(j + 1) <= 'Z')) {
- //前面为数字,后面为字母
- sb2.append(s.charAt(j) + "_");
- }else{
- sb2.append(s.charAt(j));
- }
- }else {
- //显示最后一个
- sb2.append(s.charAt(j));
- }
- }
- if (sb2.length() > 0) {
- sb.append(sb2.toString());
- }
- } else {
- //首字母大写
- String item = stringArray[i].substring(0, 1).toUpperCase() + stringArray[i].substring(1).toLowerCase();
- sb.append(item + " ");
- }
-
- }
- System.out.println(sb.toString());
- }
结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。