我有两种方法可以确定String中的单词数,但结果永远是1
!
public static void main(String[] args) {
System.out.println("Enter your String:");
String string = in.next();
System.out.println("Number of Words are:" + countWords(string));
System.out.println("Number of Words are:" + countWords2(string));
}
public static int countWords(String str) {
String[] splited2 = str.split(" ");
return splited2.length;
}
public static int countWords2(String str) {
String trimed = str.trim();
return trimed.split("\\s+").length;
}
为什么?
答案 0 :(得分:5)
Scanner#next()
方法,我假设您正在使用它,读取下一个标记,并且默认情况下它不会将空格视为标记的一部分。所以,它确实会读取输入,直到找到第一个空格。
因此,您的输入只包含一个单词,因此也就是结果。尝试使用Scanner#nextLine()
方法,您将获得预期的结果。
答案 1 :(得分:1)
用scanner.nextLine()替换in.next()因为next()会给你下一个标记而不是所有的行
Scanner scanner = new Scanner(System.in);
System.out.print("Enter a sentence:");
String sentence = scanner.nextLine();
System.out.println("Number of Words are:" + countWords(sentence));
或者您可以使用BufferedReader,因为它可以更快地阅读整行
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String sentence = br.readLine();
System.out.println("Number of Words are:" + countWords(sentence));
答案 2 :(得分:0)
我建议建立一个这样的函数:
public static int getWordCount(String string){
int counter = 0;
boolean wordFound = false;
int endOfLineIndex = s.length() - 1;
for (int i = 0; i < endOfLineIndex; i++) {
if (Character.isLetter(s.charAt(i)) == true)) {
wordFound = true;
} else if (Character.isLetter(string.charAt(i)) == false && wordFound == true) {
counter++;
wordFound = false;
} else if (Character.isLetter(string.charAt(i))) {
counter++;
}
}
return counter;
}
希望我帮忙!