Java基础课 | 句子缩写(字符串操作、编码标准、字符大小写转换、StringBuilder)

本文介绍了Java基础中的字符串操作,如访问字符、去除空格、转字符数组,以及ASCII码和Unicode码的区别。重点讲解了StringBuilder的使用,以提高字符串拼接性能,并给出了一个示例程序,实现单词首字母大写的缩写输出。
摘要由CSDN通过智能技术生成

Java基础


字符串

访问字符串中的字符

charAt(index)方法,可访问字符串中每一个字符。

去除字符串两端的空格

trim()方法,用于去除字符串两端(首尾两端)的空格。

将字符串转为字符数组

toCharArray(),用法:

//line为字符串变量
char[] arr = line.toCharArray();

编码标准

ASCII 码

比较早、简单的字符编码标准。仅包含128个不同的字符,主要是一些基本的拉丁字母、数字、标点符号、回车、换行等,每个字符都有一个唯一的整数数值与之对应。

Unicode 码

更广泛的字符编码标准。包含世界上几乎所有已知的字符、符号和文字。常见的 Unicode 编码包括 UTF-8UTF-16UTF-32,他们使用不同数量的字节来表示字符。

字符

字符编码

每个字符有一个唯一的ASCII编码值,表示它在ASCII字符集中的位置。

字符大小的比较

在比较字符大小时,实际上是比较其ASCII编码值。大小写字母之间的差值是32。

大小写字母转换

推荐做法:使用内置方法进行字符转换,常用以下两个

  • Character.toUpperCase():小写字母→大写
  • Character.toLowerCase():大写字母→小写

其他做法:大写字母的ASCII码值 + 32 = 对应的小写字母的ASCII码值

StringBuilder

用于处理字符串。

为什么使用StringBuilder而不是String

  • 使用String进行字符串拼接时,每次拼接都会创建一个新的字符串对象,将产生大量的临时对象,会影响性能
  • StringBuilder是可变的,允许我们在不创建新字符串对象的情况下进行字符串的连接和修改,不会创建大量的临时对象,因此更高效

常见用法

  • 添加字符:append()方法
  • 输出:可用toString()方法转为字符串后输出
StringBuilder sb = new StringBuilder();
sb.append('A');
System.out.println(sb.toString());

题目


题目描述
输出一个词组中每个单词的首字母的大写组合。

输入描述
输入的第一行是一个整数n,表示一共有n组测试数据。(输入只有一个n,没有多组n的输入)
接下来有n行,每组测试数据占一行,每行有一个词组,每个词组由一个或多个单词组成;每组的单词个数不超过10个,每个单词有一个或多个大写或小写字母组成;
单词长度不超过10,由一个或多个空格分隔这些单词。

输出描述
请为每组测试数据输出规定的缩写,每组输出占一行。

程序编写


参考写法:

import java.util.*;
 
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()) {
            int n = sc.nextInt();
            sc.nextLine();
            for (int i = 0; i < n; i++) {
                String line = sc.nextLine().trim(); // 获取每行输入的字符串
                char[] arr = line.toCharArray(); // 将字符串转为字符数组,方便遍历
                StringBuilder sb = new StringBuilder(); // 新建一个stringbuffer对象,输出最终结果
                int j = 0;
                while (j < arr.length) { // 遍历字符数组
                    if (arr[j] <= 'z' && arr[j] >= 'a') {
                        arr[j] = Character.toUpperCase(arr[j]);
                    }
                    sb.append(arr[j]); // 将转为大写的字符拼接到 stringbuffer中
                    while (j < arr.length && arr[j] != ' ') { // 跳过当前单词首字母之后的字母
                        j++;
                    }
                    while (j < arr.length && arr[j] == ' ') { // 跳过空格
                        j++;
                    }
                }
                System.out.println(sb.toString());
            }
        }
    }
}

我的写法:

import java.util.Scanner;

public class Main {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        
        while(sc.hasNextInt()){
            int n = sc.nextInt();
            sc.nextLine();
            while(n-- >0){
                String line = sc.nextLine();
                char[] arr = line.toCharArray();
                
                StringBuilder sb = new StringBuilder();
                boolean first = true;
                // 遍历字符数组
                for(char c:arr){
                    if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){
                        if(first) {
                            sb.append(Character.toUpperCase(c));
                            first = false;
                        }
                    }
                    if(c == ' ') first=true;
                }
                System.out.println(sb.toString());
            }
        }
    }
}

其中,遍历字符数组的部分也可以写成:

// 遍历字符数组
for(char c:arr){
  if(first){
      if(c == ' ') continue;
      if(c >= 'a' && c <= 'z') c = Character.toUpperCase(c);
      sb.append(c);
      first = false;
  }
  if(c == ' ') first=true;
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值