【藍橋杯】【串的簡單處理】
阿新 • • 發佈:2019-02-16
【題目】
在實際的開發工作中,對字串的處理是最常見的程式設計任務。
本題目即是要求程式對使用者輸入的串進行處理。具體規則如下:
1. 把每個單詞的首字母變為大寫。
2. 把數字與字母之間用下劃線字元(_)分開,使得更清晰
3. 把單詞中間有多個空格的調整為1個空格。
例如:
使用者輸入:
you and me what cpp2005program
則程式輸出:
You And Me What Cpp_2005_program
使用者輸入:
this is a 99cat
則程式輸出:
This Is A 99_cat
我們假設:使用者輸入的串中只有小寫字母,空格和數字,不含其它的字母或符號。
每個單詞間由1個或多個空格分隔。
假設使用者輸入的串長度不超過200個字元。
【分析】
這個題目非常好,對字串API的熟練掌握是一個程式設計師的基本要求。
‘0’的數值是48,’9’的數值是57,’a’的數值97,’z’的數值122
97-57=40
兩個字元相減,絕對值大於或者等於40,說明一個是字母,一個是數字,需要新增下劃線。
【原始碼】
public static void main(String[] args) {
//接收一行字串
Scanner sc = new Scanner(System.in);
String inputS = sc.nextLine();
sc.close();
//分割字串,得到字串陣列
String[] ss = inputS.split(" ");
ArrayList<String> list= new ArrayList<String>();
for (String s : ss) {
//純空格的字串不要,需要過濾掉
if(!s.trim().equals("")){
for(int i=0; i<s.length()-1;i++){
int j = i+1;
char c1 = s.charAt(i);
char c2 = s.charAt(j);
if(Math.abs(c2-c1) >= 40){
//絕對值大於或者等於40,說明一個字元是字母,一個是字元數字,需要新增下劃線
s = s.substring(0, j) + "_" + s.substring(j, s.length());
i = j+1;
j = i+1;
}
}
//'A' - 'a' = 32
s = s.replaceFirst(String.valueOf(s.charAt(0)), String.valueOf(s.charAt(0)).toUpperCase());
list.add(s);
}
}
StringBuilder sb = new StringBuilder();
for (int i=0; i<list.size(); i++) {
sb.append(list.get(i));
if(i != list.size()-1){
sb.append(" ");
}
}
System.out.println(sb);
}