你所在的公司刚刚招收了几位程序员,然而这些程序员之前在不同的公司工作,所以他们习惯的变量命名规范可能存在差异,需要让他们都习惯公司要求的命名规范,然而这样可能会降低他们的工作效率。
你的上司找到了你,希望你能编写统一命名规范的程序,确保效率不降低的前提下,统一项目变量的命名规范。
现在已经知道公司中只会存在以下三种命名规范:
- 驼峰(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();}
}