2016-06-22 2 views
0

Может ли кто-нибудь сказать мне, как использовать Scanner Class Java для поиска частоты слова в предложении.java-программа для определения частоты слова, использующего класс сканера

Я смущен, чтобы ввести строку в java. Мне нужно использовать функцию nextInt(), но для сравнения нужно ее преобразовать в char, чтобы как это сделать.

Например: -

Я вхожу в окне терминала (Давать вход)

Это мой кот.

Теперь я должен найти FREGUENCY слова «это» в приведенном выше предложении. Пожалуйста, вы можете дать мне некоторые idea.REMEMBER наложенное на нем я должен использовать ТОЛЬКО СКАНЕР КЛАСС JAVA БИБЛИОТЕКА

ПРОГРАММА С ИСПОЛЬЗОВАНИЕМ STREAM Читателю следующим образом-

import java.io.*; 

class FrequencyCount 
{ 

    public static void main(String args[]) throws IOException 
    { 
     BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); 

     System.out.println("Enter the String: "); 
     String s=br.readLine(); 
     System.out.println("Enter substring: ");  
     String sub=br.readLine(); 

     int ind,count=0; 
     for(int i=0; i+sub.length()<=s.length(); i++) 
     //i+sub.length() is used to reduce comparisions 
     { 
      ind=s.indexOf(sub,i); 
      if(ind>=0) 
      { 
       count++; 
       i=ind; 
       ind=-1; 
      } 
     } 
     System.out.println("Occurence of '"+sub+"' in String is "+count); 
    } 
} 

ответ

0

альтернативное решение с использованием шаблона

import java.util.Scanner; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class JavaApplication20 { 

    public static void main(String [] args) { 
    Scanner scanner = new Scanner(System.in); 
    System.out.print("Enter a sentence:\t"); 
    String sentence = scanner.nextLine(); 
    System.out.print("Enter a word:\t"); 
    String word = scanner.nextLine(); 

    Pattern p = Pattern.compile(word); 
    Matcher m = p.matcher(sentence); 
    int count = 0; 
    while (m.find()){ 
     count +=1; 
    }  
    System.out.println("in your sentence the frequency of \""+word+"\" is:\t" + count);  
    }  
} 
0

попробовать это.

public class JavaApplication20 { 

public static void main(String [] args) { 
    Scanner scanner = new Scanner(System.in); 
    System.out.print("Enter a sentence:\t"); 
    String sentence = scanner.nextLine(); 
    System.out.print("Enter a word:\t"); 
    String word = scanner.nextLine(); 
    int count = 0; 
    while (!sentence.equals("")){ 
     if(sentence.contains(word)){ // check if the word is in the sentence; if yes cut the sentence at the index of the first appearance of the word plus word length 
            // then check the rest of the sentence for more appearances 
      sentence = sentence.substring(sentence.indexOf(word)+word.length()); 
      count++; 
     } 
     else{ 
      sentence = ""; 
     } 
    } 
    System.out.println("in your sentence the frequency of \""+word+"\" is:\t" + count);  
    }  
} 
+0

Вы можете применить шаблон и использовать метод mathc(), которые возвращают MatchResult, там вы можете найти счет – ema

+0

@ema спасибо за подсказку. Я старался держать его простым и понятным. Я добавлю другой ответ в качестве альтернативы, используя шаблон. – Eritrean

+0

@Uzochi большое спасибо. Но я хотел спросить, что я сделаю, чтобы прервать эту программу, как только закончим строку с периодом (.) Я знаю о разделителях, но как использовать его в нем. –

0

Вы также можете ввести строку, используя класс сканера. Вот ваш код, который я модифицировал, и он работает. `

public static void main(String args[]) throws IOException 
{ 
    Scanner in=new Scanner(System.in); 

    System.out.println("Enter the String: "); 
    String s=in.nextLine(); 
    System.out.println("Enter substring: ");  
    String sub=in.nextLine(); 

    int ind,count=0; 
    for(int i=0; i+sub.length()<=s.length(); i++) 
    //i+sub.length() is used to reduce comparisions 
    { 
     ind=s.indexOf(sub,i); 
     if(ind>=0) 
     { 
      count++; 
      i=ind; 
      ind=-1; 
     } 
    } 
    System.out.println("Occurence of '"+sub+"' in String is "+count); 
} 

nextLine() метод класс сканер позволяет вам входные строки.

0

Не слушайте @Uzochi. Его ответы могут работать, но они слишком сложны и могут фактически замедлить работу вашей программы.

Для класса Scanner, существует несколько способов чтения числа или текст:

nextInt() - сканирует в следующем целочисленном значении

nextDouble() - сканирование в следующем двойном значении

nextLine() - сканирование в следующей строке текста

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html - прокрутите вниз до описания метода и в середине всех методов вы найдете все «следующие» методы.

Обратите внимание, что есть небольшая ошибка со сканером (по крайней мере, с прошлым временем, когда я использовал его). Скажем, вы используете сканер под названием scan. Если вы звоните

scan.nextInt(); 
scan.nextLine(); 

(который считывает целое число, а затем строка текста), ваш сканер будет пропускать вызов nextLine(). Это небольшая ошибка, которую можно легко устранить, добавив еще один nextLine(). Он поймает вторую nextLine.

В ответ на @Uzochi существует гораздо более простое решение для вашего алгоритма.Ваш алгоритм на самом деле быстрее его, хотя есть некоторые небольшие вещи, которые могут сделать вашу программу быстрее, чем бит:

1) Используйте цикл while вместо цикла for. Ваше использование indexOf() делает текущий индекс строки, в которой вы много пропустите, поэтому практически нет смысла иметь цикл for. Вы можете легко изменить его на петлю while. Ваши условия состоят в том, чтобы продолжать проверять, возвращает ли indexOf() неотрицательное значение (-1 означает, что нет значения), и вы увеличиваете значение этого индекса на 1 (как это делает цикл for автоматически).

2) Меньшая вещь - вам не нужна строка:

ind=-1; 

Ваш текущий код всегда будет изменять Ind, прежде чем она попадет, что if заявления, так что нет практически никаких причин, чтобы иметь эту линию в программа.

EDIT - @Uzochi может использовать встроенные библиотеки Java, но для начинающих, таких как OP, вы должны изучать, как использовать циклы while и while для эффективной записи кода.

+0

@ downvote прокомментируйте почему – ragingasiancoder