题目描述:
输入一个由若干单词组成的字符串(长度小于等于2000),然后删除字符串的首尾空格,如果串中有多于一个以上空格,则只保留一个空格,
同时,请将字符串中单词的首字母转换为大写,如果本身是大写,不要转换。
输入:
测试数据有多组,每组输入一个字符串。
输出:
对于每组输入,删除字符串中多余空格,首字母大写,然后输出。
样例输入:
3
word many word
abcd xyz
xyz
样例输出:
Have Many Words
Abcd 123 Xyz
Xyz
分析:每组输入一个,我们可以边输入边处理,就不用先把所有输入字符串存储到一个容器再回头来处理了。所以,考虑用StringBuffer。
看代码:
/**
* @author sun
* 创建时间:3月28日下午3:04:58
*/
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = Integer.parseInt(in.nextLine());
for(int i=0;i
String ss = in.nextLine();
String s = ss.trim();//去除字符串首尾的空格
StringBuffer sb = new StringBuffer(s);//每输入一个字符串就放入容器中
Do(sb);//足以调用方法的位置,每输入一个字符串就处理该字符串
}
}
static void Do(StringBuffer sb){
for(int i=1;i
if(sb.charAt(i-1)==' ' && sb.charAt(i)==' '){
sb.deleteCharAt(i);
i--;//请注意一定不能让指针挪动到下一位,每删除一位,后面所有元素会向前移位,
}//此时i已经指向下一位新的元素,如果不保留i,三个连续的空格只会删掉一个(中间那个)
}
//接下来判断开始位和空格后第一位是否为字母,并转换为大写字母
if(sb.charAt(0)>='a'&&sb.charAt(0)<='z')
sb.setCharAt(0, (char)(sb.charAt(0)-32));
for(int i=1;i
if(sb.charAt(i-1)==' ' && (sb.charAt(i)>='a'&&sb.charAt(i)<='z')){
sb.setCharAt(i, (char)(sb.charAt(i)-32));
}
}
System.out.println(sb.toString());
}
}
/*运行情况,每输入一行就解决一行
3
word many word
Word Many Word
abcd xya
Abcd Xya
xyz
Xyz
*/