平均词长(java练习题)

代码

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        // 创建 Scanner 对象,用于从键盘读取输入
        Scanner scanner=new Scanner(System.in);

        // 读取整行输入
        String sentence=scanner.nextLine();

        //使用正则表达式\\s+将句子按空白字符(空格、制表符等)拆分成单词数组。
        String []words=sentence.split("\\s+");

        int total=0;

        // 累加所有单词的长度
        for(String word : words){
            total += word.length();
        }

        // 计算平均词长
        double averageLength=(double)total/ words.length;

        // 输出结果,保留两位小数
        System.out.printf("%.2f",averageLength);
        scanner.close();
    }
}

我的笔记:

一、在Java中,Scanner类提供了多种方法来读取不同类型的输入数据。常见的方法包括nextLine(), next(), nextInt(), nextDouble()等等。它们之间的主要区别在于读取数据的方式和处理换行符(newline character)的方式。下面是每个方法的详细说明:

1. nextLine()

  • 描述: 读取一整行输入,包括行中的所有字符,直到遇到换行符。
  • 用法String line = scanner.nextLine();
  • 特点:
    • 读取输入缓冲区中的所有字符,直到遇到换行符为止。
    • 返回一个包含所读取内容的字符串,不包含换行符本身。

2. next()

  • 描述: 读取一个单词(以空白字符为分隔符)。
  • 用法String word = scanner.next();
  • 特点:
    • 读取输入缓冲区中的下一个标记(token),默认情况下,标记是由空白字符(空格、制表符等)分隔的。
    • 不会读取换行符。
    • 如果在使用next()之后调用nextLine(),需要小心处理,因为next()不会消耗换行符,可能会导致问题。

3. nextInt()

  • 描述: 读取一个整数。
  • 用法int number = scanner.nextInt();
  • 特点:
    • 读取输入缓冲区中的下一个整数。
    • 如果输入的下一个标记不是合法的整数,将抛出InputMismatchException
    • 换行符不会被读取,需要注意在连续读取不同类型输入时,可能需要额外处理换行符。

4. nextDouble()

  • 描述: 读取一个浮点数。
  • 用法double number = scanner.nextDouble();
  • 特点:
    • 读取输入缓冲区中的下一个浮点数。
    • 如果输入的下一个标记不是合法的浮点数,将抛出InputMismatchException
    • 同样地,换行符不会被读取。

注意事项

处理换行符: 当混用nextLine()和其他nextXXX()方法时,可能会遇到问题。原因是nextXXX()方法不会消耗换行符,而nextLine()会读取整行数据包括之前输入的换行符。在这种情况下,可以在调用nextLine()前后进行适当处理,比如在调用nextInt()next()之后加上一个额外的nextLine()来消耗换行符。

例如:

int number = scanner.nextInt();
scanner.nextLine(); // 消耗换行符
String line = scanner.nextLine();

通过了解这些方法的区别和使用场景,可以更有效地处理用户输入。

二、String[] words = sentence.split("\\s+"); 这行代码的作用是将字符串 sentence 按照一个或多个空白字符(包括空格、制表符和换行符等)进行拆分,并将结果存储到一个字符串数组 words 中。下面是具体的解析:

详细说明

  1. sentence:这是一个包含要拆分的文本的字符串变量。

  2. split("\\s+"):

    • split 方法是 String 类的一部分,用于基于一个正则表达式将字符串拆分成一个字符串数组。
    • "\\s+" 是用于拆分的正则表达式:
      • \\s 表示任何空白字符,包括空格、制表符、换行符等。
      • + 表示一个或多个。因此,\\s+ 匹配一个或多个连续的空白字符。
  3. 结果:

    • split 方法根据正则表达式 \\s+ 将 sentence 拆分成若干段,每段之间由一个或多个空白字符分隔。
    • 返回的结果是一个字符串数组 words,其中每个元素是 sentence 中被空白字符分隔的部分。

示例

假设 sentence"This is a test sentence.",执行以下代码:

String sentence = "This is a test sentence.";
String[] words = sentence.split("\\s+");
  • split 方法会将 sentence 按空白字符拆分。结果是一个字符串数组 words,它包含以下元素:
    • words[0] 为 "This"
    • words[1] 为 "is"
    • words[2] 为 "a"
    • words[3] 为 "test"
    • words[4] 为 "sentence."
  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值