问一个蓝桥杯的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);是什么意思?

查看全部
yaqiukasi
yaqiukasi
2017/02/21 06:27
  • java
  • 字符串处理
  • 正则表达式
  • 点赞
  • 收藏
  • 回答
    私信
满意答案
查看全部

1个回复