Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
Sample Input
you are my friend
Sample Output
4
java代码如下:
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public void run(){
Scanner sc = new Scanner(System.in);
int[] array = new int[1000];
Arrays.fill(array,0);
String input;
int curResult;
int count = -1;
boolean flag = false;
//while ((sc.hasNextLine()) && ((input = sc.nextLine()).trim().charAt(0) != '#')){
while (sc.hasNextLine()){
input = sc.nextLine();
if(input.equals("#")){
break;
}
curResult = calculate(input);
count++;
array[count] = curResult;
}
for (int i = 0; i <= count ; i++) {
System.out.println(array[i]);
}
}
public int calculate(String str) {
String str1 = str.trim();
if(str1.length() == 0){
return 0;
}
//在此前面必须要对字符串调用trim()函数
String[] strArray = str1.split("\\s+");
Set<String> set = new HashSet<>();
for (int i = 0; i < strArray.length; i++) {
if (!set.contains(strArray[i])) {
set.add(strArray[i]);
}
}
// if(set.isEmpty()){
// return 0;
// }
return set.size();
}
public static void main(String[] args){
new Main().run();
}
}
注意事项:
1.输入一连串空格(" ")时calculate()函数应该返回0;
String str1 = str.trim();
if(str1.length() == 0){
return 0;
}
2.输入"#",退出循环,输入结束;
另附一种更为优雅的代码:
代码如下:
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Main1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str;
while(sc.hasNext()) {
str=sc.nextLine();
if(str.equals("#")) break;
String[] strs = str.split(" ");
Set<String> set = new TreeSet<>();
for(String s:strs) {
if(!s.equals(""))
set.add(s);
}
System.out.println(set.size());
}
}
}