句子缩写 | char 与 String(StringBuilder) | 卡码网

本文介绍了一个Java程序,通过Scanner读取输入的词组,然后将每个单词的首字母转换为大写并输出。主要涉及字符串处理、字符数组和StringBuilder的使用。
摘要由CSDN通过智能技术生成

时间限制: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会用到自己的方法.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值