#java #string #methods #count
#java #строка #методы #подсчитывать
Вопрос:
Мне было интересно, как бы я написал метод для подсчета количества слов в строке Java только с использованием строковых методов, таких как charAt, length или substring .
Циклы и операторы if в порядке!
Я действительно ценю любую помощь, которую я могу получить! Спасибо!
Ответ №1:
Это будет работать даже с несколькими пробелами, начальными и / или конечными пробелами и пустыми строками:
String trim = s.trim();
if (trim.isEmpty())
return 0;
return trim.split("\s ").length; // separate string around spaces
Подробнее о сплите здесь.
Комментарии:
1. Небольшая поправка. Последняя строка должна быть
return words.length;
2. Я бы использовал \ W здесь вместо \ s , потому что вы могли бы использовать что-то другое, кроме пробела, разделяющего слова.
3. Короткий, приятный и эффективный.
4. @Trejkaz \w в приведенном выше коде вернет 0, если в строке только одно слово. Что неверно
Ответ №2:
public static int countWords(String s){
int wordCount = 0;
boolean word = false;
int endOfLine = s.length() - 1;
for (int i = 0; i < s.length(); i ) {
// if the char is a letter, word = true.
if (Character.isLetter(s.charAt(i)) amp;amp; i != endOfLine) {
word = true;
// if char isn't a letter and there have been letters before,
// counter goes up.
} else if (!Character.isLetter(s.charAt(i)) amp;amp; word) {
wordCount ;
word = false;
// last word of String; if it doesn't end with a non letter, it
// wouldn't count without this.
} else if (Character.isLetter(s.charAt(i)) amp;amp; i == endOfLine) {
wordCount ;
}
}
return wordCount;
}
Комментарии:
1. Вам нужно учитывать апострофы, кавычки и другие специальные символы.
2. Вы используете сокращения в своих комментариях («не является», «не делает», «не стал бы»), но ваш код не может их обработать. Он также не будет обрабатывать собак, борющихся с преступностью.
Ответ №3:
Привет, я только что разобрался с StringTokenizer следующим образом:
String words = "word word2 word3 word4";
StringTokenizer st = new Tokenizer(words);
st.countTokens();
Комментарии:
1. Это работает, но это не строковый метод, он использует отдельный класс StringTokenizer. Вопрос в том, как это сделать без использования других классов.
2. Мне нравится этот ответ. Человек, который изначально задал этот вопрос, вероятно, в любом случае получал ответ на какое-то домашнее задание. Если подумать, ваша вторая строка должна быть: StringTokenizer st = новый StringTokenizer (слова);
Ответ №4:
Просто используйте ,
str.split("\w ").length ;
Комментарии:
1. Я должен отметить, что во многих случаях это работает некорректно, поскольку имеет ряд положительных отзывов.
" ".split("\w ").length
выдает 1 (пустая строка)." a ".split("\w ").length
yiedls 2 (одно слово с конечными пробелами)
Ответ №5:
public static int countWords(String str){
if(str == null || str.isEmpty())
return 0;
int count = 0;
for(int e = 0; e < str.length(); e ){
if(str.charAt(e) != ' '){
count ;
while(str.charAt(e) != ' ' amp;amp; e < str.length()-1){
e ;
}
}
}
return count;
}
Ответ №6:
private static int countWordsInSentence(String input) {
int wordCount = 0;
if (input.trim().equals("")) {
return wordCount;
}
else {
wordCount = 1;
}
for (int i = 0; i < input.length(); i ) {
char ch = input.charAt(i);
String str = new String("" ch);
if (i 1 != input.length() amp;amp; str.equals(" ") amp;amp; !("" input.charAt(i 1)).equals(" ")) {
wordCount ;
}
}
return wordCount;
}
Ответ №7:
Использовать
myString.split("\s ");
Это сработает.
Ответ №8:
Есть простое решение, вы можете попробовать этот код
String s = "hju vg jhdgsf dh gg g g g ";
String[] words = s.trim().split("\s ");
System.out.println("count is = " (words.length));
Ответ №9:
public static int countWords(String input) {
int wordCount = 0;
boolean isBlankSet = false;
input = input.trim();
for (int j = 0; j < input.length(); j ) {
if (input.charAt(j) == ' ')
isBlankSet = true;
else {
if (isBlankSet) {
wordCount ;
isBlankSet = false;
}
}
}
return wordCount 1;
}
Комментарии:
1. Не публикуйте ответы только с кодом. Добавьте некоторый контекст.
Ответ №10:
Алгоритм в O (N)
count : 0;
if(str[0] == validChar ) :
count ;
else :
for i = 1 ; i < sizeOf(str) ; i :
if(str[i] == validChar AND str[i-1] != validChar)
count ;
end if;
end for;
end if;
return count;
Ответ №11:
import com.google.common.base.Optional;
import com.google.common.base.Splitter;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multiset;
String str="Simple Java Word Count count Count Program";
Iterable<String> words = Splitter.on(" ").trimResults().split(str);
//google word counter
Multiset<String> wordsMultiset = HashMultiset.create();
for (String string : words) {
wordsMultiset.add(string.toLowerCase());
}
Set<String> result = wordsMultiset.elementSet();
for (String string : result) {
System.out.println(string " X " wordsMultiset.count(string));
}
add at the pom.xml
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>r09</version>
</dependency>
Ответ №12:
Подсчет слов в строке:
это также может помочь —>
package data.structure.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CountWords {
public static void main(String[] args) throws IOException {
// Couting number of words in a string
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("enter Your String");
String input = br.readLine();
char[] arr = input.toCharArray();
int i = 0;
boolean notCounted = true;
int counter = 0;
while (i < arr.length) {
if (arr[i] != ' ') {
if (notCounted) {
notCounted = false;
counter ;
}
} else {
notCounted = true;
}
i ;
}
System.out.println("words in the string are : " counter);
}
}
Комментарии:
1. Вам действительно нужно добавить какое-то объяснение помимо простого базового кода.
2. я не уверен, что добавить. я думаю, что сам код говорит сам за себя.
Ответ №13:
public class TestStringCount {
public static void main(String[] args) {
int count=0;
boolean word= false;
String str = "how ma ny wo rds are th ere in th is sente nce";
char[] ch = str.toCharArray();
for(int i =0;i<ch.length;i ){
if(!(ch[i]==' ')){
for(int j=i;j<ch.length;j ,i ){
if(!(ch[j]==' ')){
word= true;
if(j==ch.length-1){
count ;
}
continue;
}
else{
if(word){
count ;
}
word = false;
}
}
}
else{
continue;
}
}
System.out.println("there are " (count) " words");
}
}
Ответ №14:
импортировать java.util.; импортировать java.io.;
открытый класс Main {
public static void main(String[] args) {
File f=new File("src/MyFrame.java");
String value=null;
int i=0;
int j=0;
int k=0;
try {
Scanner in =new Scanner(f);
while(in.hasNextLine())
{
String a=in.nextLine();
k ;
char chars[]=a.toCharArray();
i =chars.length;
}
in.close();
Scanner in2=new Scanner(f);
while(in2.hasNext())
{
String b=in2.next();
System.out.println(b);
j ;
}
in2.close();
System.out.println("the number of chars is :" i);
System.out.println("the number of words is :" j);
System.out.println("the number of lines is :" k);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Ответ №15:
Моя идея этой программы заключается в том, что:
package text;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CoutingWords {
public static void main(String[] args) throws IOException {
String str;
int cWords = 1;
char ch;
BufferedReader buffor = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter text: ");
str = buffor.readLine();
for(int i =0; i<str.length(); i ){
ch = str.charAt(i);
if(Character.isWhitespace(ch)){ cWords ; }
}
System.out.println("There are " (int)cWords " words.");
}
}
Ответ №16:
Я новичок в stackoverflow, но я надеюсь, что мой код поможет:
private int numOfWordsInLineCounter(String line){
int words = 0;
for(int i = 1 ; i<line.length();i ){
Character ch = line.charAt(i-1);
Character bch = line.charAt(i);
if(Character.isLetterOrDigit(ch) == true amp;amp; Character.isLetterOrDigit(bch)== false ) words ;
if(i == line.length()-1 amp;amp; Character.isLetterOrDigit(bch))words ;
}
return words;
}
Ответ №17:
Строковая фраза обычно содержит слова, разделенные пробелом. Ну, вы можете разделить фразу, используя пробелы в качестве разделяющих символов, и посчитать их следующим образом.
import java.util.HashMap;
import java.util.Map;
public class WordCountMethod {
public static void main (String [] args){
Map<String, Integer>m = new HashMap<String, Integer>();
String phrase = "hello my name is John I repeat John";
String [] array = phrase.split(" ");
for(int i =0; i < array.length; i ){
String word_i = array[i];
Integer ci = m.get(word_i);
if(ci == null){
m.put(word_i, 1);
}
else m.put(word_i, ci 1);
}
for(String s : m.keySet()){
System.out.println(s " repeats " m.get(s));
}
}
}
Ответ №18:
Принимая выбранный ответ за отправную точку, ниже рассматриваются несколько проблем английского языка, включая перенос слов, апострофы для притяжательных и сокращения, цифры, а также любые символы за пределами UTF-16:
public static int countWords(final String s) {
int wordCount = 0;
boolean word = false;
final int endOfLine = s.length() - 1;
for (int i = 0; i < s.length(); i ) {
// if the char is a letter, word = true.
if (isWordCharacter(s, i) amp;amp; i != endOfLine) {
word = true;
// if char isn't a letter and there have been letters before,
// counter goes up.
} else if (!isWordCharacter(s, i) amp;amp; word) {
wordCount ;
word = false;
// last word of String; if it doesn't end with a non letter, it
// wouldn't count without this.
} else if (isWordCharacter(s, i) amp;amp; i == endOfLine) {
wordCount ;
}
}
return wordCount;
}
private static boolean isWordCharacter(final String s, final int i) {
final char ch = s.charAt(i);
return Character.isLetterOrDigit(ch)
|| ch == '''
|| Character.getType(ch) == Character.DASH_PUNCTUATION
|| Character.isSurrogate(ch);
}
Ответ №19:
Я только что собрал это вместе. Увеличитель в методе WordCount() для меня немного неэлегантен, но он работает.
import java.util.*;
public class WordCounter {
private String word;
private int numWords;
public int wordCount(String wrd) {
StringTokenizer token = new StringTokenizer(wrd, " ");
word = token.nextToken();
numWords = token.countTokens();
numWords ;
return numWords;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String userWord;
WordCounter wc = new WordCounter();
System.out.println("Enter a sentence.");
userWord = input.nextLine();
wc.wordCount(userWord);
System.out.println("You sentence was " wc.numWords " words long.");
}
}
Ответ №20:
создайте переменную count, state. инициализировать переменные
если присутствует пробел, продолжайте считать, поскольку в противном случае увеличивайте количество. например:
if (string.charAt(i) == ' ' ) {
state = 0;
} else if (state == 0) {
state = 1;
count = 1;
Ответ №21:
и
lambda, в которых не требуется разбиение и сохранение подсчитанных слов, выполняется только подсчет
String text = "counting w/o apostrophe's problems or consecutive spaces";
int count = text.codePoints().boxed().collect(
Collector.of(
() -> new int[] {0, 0},
(a, c) -> {
if( ".,; t".indexOf( c ) >= 0 )
a[1] = 0;
else if( a[1] == 0 ) a[0] ;
}, (a, b) -> {a[0] = b[0]; return( a );},
a -> a[0] ) );
возвращает: 7
работает как машина состояния, которая подсчитывает переходы от символов-интервалов .,; t
к словам
Ответ №22:
if(str.isEmpty() || str.trim().length() == 0){
return 0;
}
return (str.trim().split("\s ").length);
Ответ №23:
String a = "Some String";
int count = 0;
for (int i = 0; i < a.length(); i ) {
if (Character.isWhitespace(a.charAt(i))) {
count ;
}
}
System.out.println(count 1);
Он будет подсчитывать пробелы. Однако, если мы добавим 1 в count , мы сможем получить точные слова.