PRELOADER

不念过去 不负现在 不畏将来

当前文章 : 《单词长度》

12/4/2018 —— 

题目: 输入一个句子,返回这个句子中包含的每个单词的长度。句子中的每个单词以空格为分界,句子以英文句号结束。每个长度中间加空格,末尾的句号不算做最后一个单词的长度中。

例子: 输入 it's a good test. 输出:“4 1 4 4”
代码:

package wordLength;

import java.util.Scanner;

public class wordLength {

    public static void main(String[] args) {
        Scanner in =new Scanner(System.in);
        String a = in.next();
        int flag = a.indexOf(".");
        do {
            if(flag<0) {
                System.out.print(a.length()+" ");
                a = in.next();
                flag = a.indexOf(".");
                }
            } while(flag<0);
        if(flag>=0) {
            System.out.println((a.length()-1)+" ");
            a = in.next();
            flag = a.indexOf(".");
            }
        }
    }
  • 1、这个题目要求的是一次性输入整个句子,最后在输出结果。所以在读入键盘输入时要使用in.next 。这个语句在读书时仅读一个空格前的内容,而in.nextLine会读入键盘输入的整一行,所以不用。
  • 2、在首次读入句子中的首个单词后,需要判断这个单词里是否句号这个字符,因为如果含有句号则需要进行不同的输出,即需要讲字符串长度减一,即减去句号的长度。使用indexOf(".")进行判断该词中是否含有句号,因为该语句返回的一个表示该字符在字符串中的位置,若存在则返回值可能是从0开始的一个数字,而不存在则返回-1,所以使用flag记住该返回值,用于判断。
  • 3、在输出该次后,需要进行循环,此时需要重新读入下一个单词。最后会以句号结尾,也就是说每个输入的句子必须含有句号。也就是说,不含有句号的输出可能会执行n次,所以使用do-while循环,而含有句号的输出(减1)仅会执行一次,而且在最后,所以这段代码不需要放在循环体内,只需放在程序的最后一部分就好。