你所在的公司剛剛招收了幾位程序員,然而這些程序員之前在不同的公司工作,所以他們習慣的變量命名規范可能存在差異,需要讓他們都習慣公司要求的命名規范,然而這樣可能會降低他們的工作效率。
你的上司找到了你,希望你能編寫統一命名規范的程序,確保效率不降低的前提下,統一項目變量的命名規范。
現在已經知道公司中只會存在以下三種命名規范:
- 駝峰(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();}
}