你所在的公司刚刚招收了几位程序员,然而这些程序员之前在不同的公司工作,所以他们习惯的变量命名规范可能存在差异,需要让他们都习惯公司要求的命名规范,然而这样可能会降低他们的工作效率。
你的上司找到了你,希望你能编写统一命名规范的程序,确保效率不降低的前提下,统一项目变量的命名规范。
现在已经知道公司中只会存在以下三种命名规范:
- 驼峰(Camel),单词之间没有分隔符,第一个单词首字母小写,其余单词首字母大写,其余字母小写,例如
userName
; - 帕斯卡(Pascal),单词之间没有分隔符,所有单词首字母大写,其余字母小写,例如
UserName
; - 下划线(Snake),单词之间用下划线
_
分隔,所有字母小写,例如user_name
。
输入格式:
第一行输入一个整数 N(1≤N≤100) 和一个字符串 T ,分别表示变量名的数量和最后统一的命名规范,其中命名规范只存在 Camel
,Pascal
,Snake
三种。
接下来 N 行每行输入一个只包含大小写字母和下划线的字符串 Si(1≤∣Si∣≤50) ,表示第 i 个变量名,命名方式为 Camel
,Pascal
,Snake
中的一种。
输出格式:
每一行输出一个字符串,表示第 i 个变量统一成命名规范 T 后的变量名。
输入样例:
4 Snake
userName
Password
background_color
text
输出样例:
user_name
password
background_color
text
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
代码示例:
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
String type = reader.next();
for(int i=0;i<n;i++){
String s = reader.next();
List<String> words = toWords(s);
System.out.println(toLines(words,type));
}
}
private static List<String> toWords(String s) {
List<String> words = new ArrayList<>();
if(s.contains("_")){
String[] split = s.split("_");
words.addAll(Arrays.asList(split));
} else {
if(!s.isEmpty()){
int index = 0;
for(int i=1; i<s.length(); i++){
if(Character.isUpperCase(s.charAt(i))){
words.add(s.substring(index,i));
index = i;
}
}
words.add(s.substring(index));
}
}
return words;
}
private static String toLines(List<String> words,String type) {
StringBuilder s = new StringBuilder();
switch (type) {
case "Snake" -> {
for (int i = 0; i < words.size(); i++) {
if (i >= 1) {
s.append("_");
}
s.append(words.get(i).toLowerCase());
}
} case "Camel" -> {
s.append(words.get(0).toLowerCase());
for (int i = 1; i < words.size(); i++) {
s.append(Character.toUpperCase(words.get(i).charAt(0)));
s.append(words.get(i).substring(1).toLowerCase());
}
}
case "Pascal" -> {
for (String word : words) {
s.append(Character.toUpperCase(word.charAt(0)));
s.append(word.substring(1).toLowerCase());
}
}
}
return s.toString();
}
}