时间限制:1.000S 空间限制:32MB
题目描述
输出一个词组中每个单词的首字母的大写组合。
输入描述
输入的第一行是一个整数n,表示一共有n组测试数据。(输入只有一个n,没有多组n的输入)
接下来有n行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。
输出描述
请为每组测试数据输出规定的缩写,每组输出占一行。
输入示例
1
ad dfa fgs
输出示例
ADF
提示信息
注意:单词之间可能有多个空格
题解:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in); //1
while(sc.hasNext()){
int total = sc.nextInt(); //不可以用nextLint(),因为nextLine()接受的是String
sc.nextLine(); //吸收回车
for(int i = 0; i < total; i++){
String line_1 = sc.nextLine().trim(); //.trim()去除首尾空格
char[] arr = line_1.toCharArray(); //特定方法
StringBuilder line_2 = new StringBuilder(); //StringBuilder类型的,为了减少后期计算压力
int j = 0;
while(j < arr.length){ //用while才可以在循环内部直接i++,用for-each做不到.
if(arr[j] <= 'z' && arr[j] >= 'a'){
arr[j] = Character.toUpperCase(arr[j]);
line_2.append(arr[j]);
}else if (arr[j] <= 'Z' && arr[j] >= 'A'){
line_2.append(arr[j]);
}
while(j < arr.length && arr[j] != ' '){
j++;
}
while(j < arr.length && arr[j] == ' '){
j++;
}
}
System.out.println(line_2);
}
}
}
}
心得:
①.nextLine() 和 .nextInt() 区别:
前者接收一行String,后者接受一个int
②有时需要专门写一个 sc.nextLine()接收回车.(但是什么时候需要?查找了一下,依旧不是很理解)
③String 的 .trim()方法可以去除首尾空格
④StringBuilder(StringBuffer相似但不同,一般反而还推荐StringBuffer)在涉及字符串拼接时,频繁的使用String的"+"会降低性能,这时StringBuilder类性能比较友好.StringBuilder会用到自己的方法.