Ответ 1
Если вы хотите игнорировать начальные, конечные и повторяющиеся пробелы, вы можете использовать
String trimmed = text.trim();
int words = trimmed.isEmpty() ? 0 : trimmed.split("\\s+").length;
Запишите метод wordCount, который принимает параметр String как его параметр и возвращает количество слов в String. Слово представляет собой последовательность из одного или нескольких непростых символов (любой символ, отличный от ''). Например, вызов wordCount ( "hello" ) должен возвращать 1, call wordCount ( "как вы?" ) Должен возвращать 3, вызов wordCount ( "эта строка имеет широкие пространства" ) должен возвращать 5, а вызов wordCount ("") должен вернуть 0.
Я сделал функцию:
public static int wordCount(String s){
int counter = 0;
for(int i=0; i<=s.length()-1; i++) {
if(Character.isLetter(s.charAt(i))){
counter++;
for(i<=s.length()-1; i++){
if(s.charAt(i)==' '){
counter++;
}
}
}
}
return counter;
}
Но я знаю, что у этого есть 1 ограничение, что он также посчитает количество пробелов после того, как все слова в строке закончатся, и он будет также считать 2 пробела, возможно, как 2 слова:( Есть ли предопределенная функция для подсчета слов? или может ли этот код быть исправлен?
Если вы хотите игнорировать начальные, конечные и повторяющиеся пробелы, вы можете использовать
String trimmed = text.trim();
int words = trimmed.isEmpty() ? 0 : trimmed.split("\\s+").length;
public static int wordCount(String s){
if (s == null)
return 0;
return s.trim().split("\\s+").length;
}
Получайте удовольствие от функции.
String str="I am a good boy";
String[] words=str.split("\\s+");
System.out.println(words.length);
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split(java.lang.String)
Разделяет эту строку вокруг совпадений данного регулярного выражения.
Это должно быть легко:
String[] arr = "how are you sir".split("\\s");
System.out.printf("Count [%d]%n", arr.length);
Просто используйте s.split(" ").length
и для широких пространств... используйте s.trim().replaceAll("\\s+"," ").split(" ").length
Добавлены некоторые строки в ваш код:
public static int wordCount(String s){
int counter=0;
for(int i=0;i<=s.length()-1;i++){
if(Character.isLetter(s.charAt(i))){
counter++;
for(;i<=s.length()-1;i++){
if(s.charAt(i)==' '){
counter++;
i++;
while (s.charAt(i)==' ')
i++;
}
}
}
}
return counter;
}
public static int wordCount(String s){
int counter=0;
for(int i=0;i<=s.length()-1;i++){
if(Character.isLetter(s.charAt(i))){
counter++;
for(;i<=s.length()-1;i++){
if(s.charAt(i)==' '){
i++;
break;
}
}
}
}
return counter;
}
Это то, что вам нужно, если вы не используете предопределенную функцию. Я проверил его сам. Пожалуйста, дайте мне знать, есть ли какие-либо ошибки!
Мои несколько решений:
public static int wordcount1(String word) {
if (word == null || word.trim().length() == 0) {
return 0;
}
int counter = 1;
for (char c : word.trim().toCharArray()) {
if (c == ' ') {
counter++;
}
}
return counter;
}
//
public static int wordcount2(String word) {
if (word != null || word.length() > 0) {
return word.trim().length()
- word.trim().replaceAll("[ ]", "").length() + 1;
} else {
return 0;
}
}
//Рекурсивный
public static int wordcount3(String word) {
if (word == null || word.length() == 0) {
return 0;
}
if (word.charAt(0) == ' ') {
return 1 + wordcount3(word.substring(1));
}
return wordcount3(word.substring(1));
}
//
public static int wordcount4(String word) {
if (word == null || word.length() == 0) {
return 0;
}
String check = word.trim();
int counter = 1;
for (int i = 0; i < check.length(); i++) {
if (i > 0 && Character.isSpaceChar(check.charAt(i))
&& !Character.isSpaceChar(check.charAt(i - 1))) {
counter++;
}
}
return counter;
}