单词长度

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)仅会执行一次,而且在最后,所以这段代码不需要放在循环体内,只需放在程序的最后一部分就好。