Напишіть код, щоб знайти кількість слів у рядку, використовуючи методи

Я шукав, і я не можу знайти ніде, як написати кількість слів за допомогою 3 методів. Ось як виглядає код до цих пір. Я загубився, як використовувати ці методи. Я можу це зробити, не використовуючи різні методи і використовуючи лише один. Будь ласка, допоможіть!!!

    public static void main(String[] args) {
    Scanner in = new Scanner (System.in);
    System.out.print("Enter a string: ");
    String s = in.nextLine();
    if (s.length() > 0)
    {
        getInputString(s);
    }
    else 
    {
        System.out.println("ERROR - string must not be empty.");
        System.out.print("Enter a string: ");
        s = in.nextLine();
    }
   //Fill in the body with your code
}

// Given a Scanner, prompt the user for a String.  If the user enters an empty
// String, report an error message and ask for a non-empty String.  Return the
// String to the calling program.
private static String getInputString(String s) {
    int count = getWordCount();
    while (int i = 0; i < s.length(); i++)
    {
        if (s.charAt(i) == " ")
        {
            count ++;
        }
    }
    getWordCount(count);
   //Fill in the body

   //NOTE: Do not declare a Scanner in the body of this method.
}


// Given a String return the number of words in the String.  A word is a sequence of 
// characters with no spaces.  Write this method so that the function call:
//      int count = getWordCount("The quick brown fox jumped");
// results in count having a value of 5.  You will call this method from the main method.
// For this assignment you may assume that
// words will be separated by exactly one space.
private static int getWordCount(String input) {
   //Fill in the body
}

}

EDIT: Я змінив код на

private static String getInputString(String s) {
    String words = getWordCount(s);
    return words.length();
}


private static int getWordCount(String s) {
    return s.split(" ");
}

Але я не можу отримати рядок перетворити в ціле.

2
Я був напівздивований, s.charAt (i) == "" навіть компілює. Потім я пам'ятаю автобокс, і це в основному діє як Character.valueOf (s.charAt (i)) == "" . І так, це ніколи не буде вірно, викликати Характер і Рядок навіть не одного типу.
додано Автор cHao, джерело
Я був напівздивований, s.charAt (i) == "" навіть компілює. Потім я пам'ятаю автобокс, і це в основному діє як Character.valueOf (s.charAt (i)) == "" . І так, це ніколи не буде вірно, викликати Характер і Рядок навіть не одного типу.
додано Автор cHao, джерело
Я відредагував вашу публікацію, щоб відновити оригінал і згадати зроблені вами зміни. Будь ласка, не редагуйте оригінальний код питання після цього, за винятком того, щоб виправити помилки, зроблені під час введення; це скасовує відповіді. Просто додайте нотатку з деталізацією того, що ви змінили. (Але майте на увазі, що зміни, які ви внесли, перетворили питання на зовсім інше.)
додано Автор cHao, джерело
Я відредагував вашу публікацію, щоб відновити оригінал і згадати зроблені вами зміни. Будь ласка, не редагуйте оригінальний код питання після цього, за винятком того, щоб виправити помилки, зроблені під час введення; це скасовує відповіді. Просто додайте нотатку з деталізацією того, що ви змінили. (Але майте на увазі, що зміни, які ви внесли, перетворили питання на зовсім інше.)
додано Автор cHao, джерело
Я відредагував вашу публікацію, щоб відновити оригінал і згадати зроблені вами зміни. Будь ласка, не редагуйте оригінальний код питання після цього, за винятком того, щоб виправити помилки, зроблені під час введення; це скасовує відповіді. Просто додайте нотатку з деталізацією того, що ви змінили. (Але майте на увазі, що зміни, які ви внесли, перетворили питання на зовсім інше.)
додано Автор cHao, джерело
Що стосується проблеми зараз, це пов'язана з логікою. s.split ("") повертає String [] , а words.length повертає int . Доданий код знаходиться в неправильних місцях; getInputString() має бути отримання рядка , а getWordCount має отримувати кількість слів .
додано Автор cHao, джерело
Це нормально, щоб задавати конкретні питання тут, але ми не збираємося робити домашнє завдання. Будьте дуже зрозумілі в тому, що ви намагалися і де застрягли.
додано Автор Vincent van der Weele, джерело
схоже, ви використовуєте способи штрафу, які проблеми у вас з використанням методів?
додано Автор Stephan, джерело
if (s.charAt (i) == "") завжди буде помилковим, оскільки ви запитуєте, чи є той самий об'єкт, що і рядок. '' буде представляти пробіл як символ
додано Автор Edd, джерело

10 Відповіді

Ви прочитали назву методу і подивіться на коментарі, щоб вирішити, що має бути реалізовано в методі, і значення, які слід повернути.

Підпис методу getInputString має бути:

private static String getInputString(Scanner s) {

    String inputString = "";

   //read the input string from system in
   //....

    return inputString;

}

Підпис методу getWordCount має бути:

private static int getWordCount(String input) {

    int wordCount = 0;

   //count the number of words in the input String
   //...

    return wordCount;
}

Метод main має виглядати приблизно так:

public static void main(String[] args) {

   //instantiate the Scanner variable

   //call the getInputString method to ... you guessed it ... get the input string

   //call the getWordCount method to get the word count

   //Display the word count
}
3
додано
                 count=1 //last word must be counted
                 for(int i=0;i
2
додано
Пояснення буде приємним, також це той самий код, що й Опу.
додано Автор Kobi K, джерело

Використовуйте trim() і split() на 1-n символах пробілів:

private static int getWordCount(String s) {
    return s.trim().split("\\s+").length;
}

Виклик trim() є необхідним, інакше ви отримаєте одне додаткове слово, якщо у рядку є провідні пробіли.

Параметр "+ +" необхідний для підрахунку декількох пробілів як окремого розділювача слів. s - регулярний вираз для "пробілів". + - це регулярний вираз для "1 або більше".

1
додано
@RosdiKasim ой! Я скопіював неправильний підпис методу (фіксований). Крім того, чи він зараз вивчає те, що я додав пояснення?
додано Автор Bohemian, джерело
@RosdiKasim: Ну він щось спробував, тому ми і відповіли
додано Автор Nandkumar Tekale, джерело
По-перше, це не компілюється. По-друге, він повинен щось навчитися.
додано Автор Rosdi Kasim, джерело
@Bohemian, я б лише перенаправив його на відповідний javadoc для кожного з методів, які ви використовуєте. Не давайте йому рибу, навчіть його ловити рибу ;-)
додано Автор Rosdi Kasim, джерело
Крім того, якщо ви читаєте коментар для його методу getWordCount , він повинен сам рахувати слова. Використання вбудованих методів java не враховується.
додано Автор Rosdi Kasim, джерело

Вам потрібно підрахувати кількість пробілів у рядку . Це число слів у рядку.

Ви побачите, що ваш рахунок буде вимкнений на 1, але після деяких роздумів і помилок ви зрозумієте, чому.

Щасливі навчання!

1
додано
Я ні, насправді. Я схильний підсвідомо фільтрувати коментарі; вони всі, але невидимі для мене, якщо вони не вказані, або вони надмірні, або смішні.
додано Автор cHao, джерело
На жаль. Цей коментар має двадцять три пробіли, якщо ви переглядаєте джерело. Але є тільки двадцять одне слово. Не кожен простір відокремлює слова.
додано Автор cHao, джерело
@cHao, Чи читали ви коментар вище за його метод getWordCount ? Для цього призначення ви можете вважати, що слова будуть розділені рівно одним пропуском.
додано Автор Rosdi Kasim, джерело

Це можна зробити за допомогою:

private static int getWordCount(String input) {
    return input.split("\\s+").length;
}
1
додано
Можу запропонувати "" + ", а не " ". Просто розщеплення на точно кожен u0020 майже напевно буде виводити з ладу слова в цьому коментарі, наприклад, тому що я зазвичай використовую два пробіли після періодів. Але загальна ідея хороша.
додано Автор cHao, джерело
Я намагаюся перемістити рядок з першого методу в getIntputString. І це дає мені помилку, що її не застосовується, і її будують правильно. Потім отримуємо int, щоб перейти до методу getWordCount. Я не можу отримати код для переходу до наступного методу.
додано Автор user2509405, джерело
@ user2509405 можна скопіювати останню точну помилку
додано Автор user2509423, джерело

Використовуйте метод String.split() , наприклад:

String[] words = s.split("\\s+");
int wordCount = words.length;
0
додано

Я не впевнений, що у вас виникають проблеми з методами, але я не думаю, що вам потрібно більше одного, спробуйте це: він використовує розділ, щоб розділити слова в рядку, і ви можете вибрати делімери

String sentence = "This is a sentence.";  
String[] words = sentence.split(" ");  

for (String word : words) {  
   System.out.println(word);  
}

тоді ви можете зробити:

numberOfWords = words.length();

якщо ви хочете використовувати 3 методи, ви можете викликати метод з методу main() , який робить це для вас, наприклад:

public String getInputString() {

    Scanner in = new Scanner (System.in);
    System.out.print("Enter a string: ");
    String s = in.nextLine();
    if (s.length() > 0) {
        return s;
    } else {
        System.out.println("ERROR - string must not be empty.");
        System.out.print("Enter a string: ");
        return getInputString();
    }
}

public int wordCount(String s) {

    words = splitString(s)

    return words.length();
}

public String[] splitString(String s) {

    return s.split(" ");
}
0
додано
@ user2509405 "ось мій код", де ви поклали його?
додано Автор Stephan, джерело
@ user2509405 там ви йдете, я зробив 3 способи для вас
додано Автор Stephan, джерело
@ user2509405 Я бачу вашу проблему, уважніше читайте мій код, ви неправильно вкладаєте неправильний код
додано Автор Stephan, джерело
@ user2509405 Підрахунок ваших слів має повертати words.length (), а в рядку getinput повинен бути код сканера
додано Автор Stephan, джерело
umm, у цьому випадку ви можете мати один метод для прийняття рядка, який переходить до переліченого тут методу wordcount, який викликає метод, який розділяє рядок
додано Автор Stephan, джерело
Я редагую його до мого початкового запитання.
додано Автор user2509405, джерело
Я можу зробити це одним методом, але я повинен використовувати 3.
додано Автор user2509405, джерело
Ей це те, що я маю, і я в моєму другому методі говорить, що рядок не може перетворити на int. ось мій код.
додано Автор user2509405, джерело

На основі вашого коду я вважаю, що це те, що ви намагаєтеся зробити:

private static int getWordCount(String input) {

    int count = 0;

    for (int i = 0; i < input.length(); i++) {
        if (input.charAt(i) == ' ') {
            count++;
        }
    }

    return count;
}

Ось що я зробив:

  • Я перемістив код, з якого ви грали, у правильний метод ( getWordCount ).
  • Виправлено цикл, який ви намагалися використовувати (я думаю, що ви маєте для і поки цикли плутані)
  • Виправлено перевірку на пробіл ( '' не "" )

У цьому коді є помилка, яку потрібно вирішити, як виправити:

  • getWordCount("How are you"); will return 2 when it should be 3
  • getWordCount(""); will return 0
  • getWordCount("Hello"); will return 0 when it should be 1

Удачі!

0
додано
Так ... з якоїсь причини, код, який насправді вважатиме слова, був знятий. Я розглядав можливість повернення.
додано Автор cHao, джерело
Здавалося б, код, наданий у запиті, був змінений після того, як я опублікував це
додано Автор Edd, джерело

Краще використовувати просту функцію spilled() з аргументами як простір

int n= str.split(" ").length;
0
додано
public static int Repeat_Words(String arg1,String arg2)
{
    //It find number of words can be formed from a given string

    if(arg1.length() < 1 || arg2.length() < 1)
        return 0;

    int no_words = 99999;
    char[] str1 = arg1.toCharArray();
    char[] str2 = arg2.toCharArray();


    for(int x = 0; x < str1.length; x++)
    {
        int temp = 0;
        for(int y = 0; y < str2.length; y++)
        {
            if(str1[x] == str2[y])
            temp++;
        }
        if(temp == 0)
            return 0;
        if(no_words > temp)
            no_words = temp;

        temp = 0;
    }

    return no_words;
}
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників