本节课了解了ASCII码和字符操作。
-
字符大小的比较
每个字符都有一个唯一的 ASCII 编码值,表示它在 ASCII 字符集中的位置。在比较字符大小时,实际上是比较它们的 ASCII 编码值,比如小写字母 a的 ASCII 编码值是 97, 小写字母b
的 ASCII 编码值是98。大写字母 A 的ASCII编码值是 65, 大写字母 B 的ASCII编码值是 66, 大小写字母之间的差值是32。
字符比较时直接使用"<",">","="即可。
字符转换:
toUpperCase()
: 将小写字母转换成大写形式toLowerCase()
: 将大写字母转换成小写形式
char a = 'a'; // 小写字符 'a'
char uppercaseChar = Character.toUpperCase(a); // 大写字符 'A'
-
字符串
trim()
方法
Java 中的 trim()
方法用于移除字符串两端的空白字符。
-
StringBuilder
的使用
这是因为如果你使用 String
进行字符串拼接,每次拼接都会创建一个新的字符串对象,这会产生大量的临时对象,会影响性能。而使用 StringBuilder
可以避免这个问题,StringBuilder
是可变的,它允许你在不创建新的字符串对象的情况下进行字符串的连接和修改,不会创建大量的临时对象,因此更高效。
题目描述
输出一个词组中每个单词的首字母的大写组合。
输入描述
输入的第一行是一个整数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);
while(sc.hasNextLine()){
int n=sc.nextInt();
sc.nextLine();//吸收掉回车符
for(int i=0;i<n;i++){//读取n行字符串
String in=sc.nextLine().trim();//去掉两端空白字符
StringBuilder out=new StringBuilder();
char[] input=in.toCharArray();//转为字符数组
int j=0;
while(j<input.length){
if(input[j]<='z' && input[j]>='a'){
input[j]=Character.toUpperCase(input[j]);
}//读取每个单词首字母,转为大写字母
out.append(input[j]);
while(j<input.length && input[j]!=' '){
j++;
}//跳过每个单词后续字母
while(j<input.length && input[j]==' '){
j++;
}//跳过单词间空行
}
System.out.println(out.toString());
}
}
}
}
- 第8行为什么要加入一个sc.nextLine()?
sc.nextInt()和下一个sc.nextLine()之间一般要加入一行sc.nextLine(),因为nextInt只读取了一个整型数,后面还有换行符,sc.nextLine()读到换行符结束,相当于读完了n所在的第一行。若输出加入的这一行sc.nextLine()会发现它等于"",没有字符。
String temp=sc.nextLine();
if(temp.equals("")){
System.out.println("Yes");
}
具体参考