yaqiukasi 2017-02-21 06:27 采纳率: 0%
浏览 1412
已采纳

问一个蓝桥杯的java题,新手求解

题目要求是:
1. 把每个单词的首字母变为大写。
2. 把数字与字母之间用下划线字符(_)分开,使得更清晰
3. 把单词中间有多个空格的调整为1个空格。
我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。假设用户输入的串长度不超过200个字符。

程序是这样的:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SimpleString {
public static void main(String args[]){
String str="";//空字符串,并且在内存中开辟了空间
str=(new Scanner(System.in)).nextLine();//获取行
String []str1=str.split("[ ]+");
for(int i=0;i<str1.length;i++)str1[i]=String.valueOf((char)(str1[i].charAt(0)+('A'-'a')))+str1[i].substring(1);
String s="";
for(int i=0;i<str1.length-1;i++)//System.out.print(str1[i]+" ");
{
s+=str1[i]+" ";//一个字符串加一个空格
}
s+=str1[str1.length-1];//加上最后一个字符串
Pattern p=Pattern.compile("([0-9]+)");//正则表达式,判断数字
Matcher m=p.matcher(s);//测试字符串s
String fin="";
int st=0;
while(m.find()){//部分匹配
int start=m.start();
int end=m.end();
fin+=s.substring(st,start);//截取0到start-1
if(s.charAt(start-1)!=' ')fin+="_";//数字的前面如果不是空格,加下划线
fin+=m.group(1);
if(s.charAt(end)!=' ')fin+="_";//数字的末尾如果不是空格,加下划线
st=end;//数字结尾的下一个字符的位置
}
if(st<s.length())fin+=s.substring(st);//最后一串数字的结尾如果不是字符串尾部,则加上剩下的字符
System.out.println(fin);
}
}
有些地方能看懂,我加了注释,其他地方还有些问题:
1、String []str1=str.split("[ ]+");是什么意思?是按空格来分开字符串吗?如果字符之间有两个以上的空格程序是怎么处理的?
2、for(int i=0;i<str1.length;i++)str1[i]=String.valueOf((char)(str1[i].charAt(0)+('A'-'a')))+str1[i].substring(1);这段代码什么意思?
3、fin+=m.group(1);是什么意思?

  • 写回答

1条回答 默认 最新

  • 我是一堆小石头 2017-02-21 06:49
    关注

    大概看了一下,都是一些正则表达式的基本语法,比如你提出来的第一个问题, String []str1=str.split("[ ]+") 里的"[ ]+"是一个正则表达式,表示的意思是匹配一个或者多个空格符。
    再看第三个问题,也是正则的语法,返回的结果是上述代码中的变量:s,通过正则表达式"([0-9]+)"所匹配出来的“第一个”结果。该表达式是匹配一个或多个数字。至于为什么要用m.group(1)才能得出结果,我就不解释了,具体可看正则表达式中group的语法。
    至于第二个问题,无外乎是java关于字符串的一些操作,像substring,charAt之类的,都是基础语法问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 操作系统相关算法中while();的含义
  • ¥15 CNVcaller安装后无法找到文件
  • ¥15 visual studio2022中文乱码无法解决
  • ¥15 关于华为5g模块mh5000-31接线问题
  • ¥15 keil L6007U报错
  • ¥15 webapi 发布到iis后无法访问
  • ¥15 初学者如何快速上手学习stm32?
  • ¥15 如何自动更换布娃娃图片上的衣服
  • ¥15 心理学eprime编程
  • ¥15 arduino esp8266开发