分析:
题目给的字符串,只包含空格、字母、数字,所以需要只需要对拿到的字符串转换成数组。然后先将下标为0的元素拼接到新的字符串上面(先判断是否为空格,是空格就不添加,是字母就先进行大写转换,同时更新数组下标为0的字母为大写,方便后面遍历)。
之后遍历就可以从下标1开始了,拿到当前下标的数据之后,对上一个数据进行查看,根据处理规则进行拼接。(如第一个是大写字母,第二个是数字,那么就需要添加下划线,在添加数字)
Java:
import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
//拿数据
Scanner scan = new Scanner(System.in);
String str = scan.nextLine();
scan.close();
String s = "";
char ch[] = str.toCharArray();
//先放第一个数据进去,如果是空格,就不做操作
if(ch[0]!=' '){
//如果第一个放入的数据是字母,需要将其转换成大写字母
if(ch[0]>='a'&&ch[0]<='z'){
char c = (char)((int)ch[0]-32);
//更新第一个数据(方便之后插入第二个元素的时候进行判断)
ch[0] = c;
//拼接到字符串里面
s +=c;
}else{
//如果不是空格,不是字母,那就只能是数字
s +=ch[0];
}
}
//遍历字符串添加数据
for(int i = 1;i<ch.length;i++){
//如果需要插入的是字母,那么就判断前面是否有空格,如果有空格,那么就转换成大写(首字母大写)
//如果前面是数字,就先添加下划线,不然一律添加该数据进去就行
if(ch[i]>='a'&&ch[i]<='z'){
//当前数据是字母
//如果上一个元素是空格,就添加大写字母
if(ch[i-1]==' '){
char c = (char)((int)ch[i]-32);
s +=c;
}else if(ch[i-1]>='0'&&ch[i-1]<='9'){
//如果上一个数据是数字,那么要添加下划线
s +='_';
s +=ch[i];
}else{
//如果前面的数据既不是空格,也不是数字,那么添加本身即可
s +=ch[i];
}
}else if(ch[i]>='0'&&ch[i]<='9'){
//当前数据是数字,只需要判断前面是不是字母,是字母,添加下划线就好
if( (ch[i-1]>='a' && ch[i-1]<='z')||(ch[i-1]>='A'&&ch[i-1]<='Z') ){
s +='_';
s += ch[i];
}else{
//如果前面不是字母,那么直接添加进去就可以
s += ch[i];
}
}else{
//如果既不是字母,也不是数字,那就是空格,我们只需要判断前面一个是不是空格,如果不是,就添加,如果是,就跳过这次添加
if(ch[i-1]==' '){
continue;
}else{
s += ch[i];
}
}
}
System.out.println(s);
}
}