import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); StringBuffer strb = new StringBuffer(); String input = null; String tmpstr = null; String[] splitstr = null; int sum=0; while (in.hasNextLine()) { strb.append("1"); input = in.nextLine(); strb.append(input).append("1"); tmpstr=strb.toString(); splitstr = tmpstr.split("[A-Z]"); sum = splitstr.length-1; strb.delete(0,strb.length()); System.out.println(sum); } } }
先上代码.本题目有多组数据输入,需要while死循环.当然也不能重复new新变量,会导致内存溢出,故所有变量都定义在while死循环外部.
使用StringBuffer来实现多次利用,且append方法比字符串的+更高效.由于没有直接清空内容的方法,使用了delete方法来清空数据.
笔者没有判断输入的字符串首尾是否有大写字母,而是取巧,头尾都追加字符串内容"1"(或者其它不是A-Z的内容均可),这样就可以确保将传入的字符串插入中间后两侧一定没有A-Z.
StringBuffer比较头疼的地方就是没有split方法,只好先转换为字符串对象,然后使用了正则匹配的方式,[A-Z]这样些就是匹配大写的26个字母.切分出的字符串数组的长度刚好比用于拆分的大写字母个数多1,-1之后即为正确的结果.