Как ограничить количество слов при чтении строки из стандартного ввода? - PullRequest
0 голосов
/ 28 сентября 2019

Я новичок в Stackoverflow, и я впервые задаю вопрос.Я тщательно искал свою проблему, однако не смог найти подходящий ответ.Прошу прощения, если об этом спросили.Заранее спасибо.

Вопрос от Hyperskill.com выглядит следующим образом:

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

Пример ввода 1:

Этот курс Javaадаптивный

Пример вывода 1:

ЭтоЯвакурсявляетсяадаптивный

Моя пробная версия, чтобы решить ее

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        /* I have not initialized the "userInput" String.
         * I know that String is immutable in Java and
         * if I initialize it to an empty String ""
         * and read a String from user.
         * It will not overwrite to the "userInput" String.
         * But create another String object to give it the value of the user input,
         * and references the new String object to "userInput".
         * I didn't want to waste memory like that.
         */
        String userInput;
        String[] userInputSplitFirstLine = new String[3];
        String[] userInputSplitSecondLine = new String[2];
        Scanner scan = new Scanner(System.in);
        userInput = scan.nextLine();
        userInputSplitFirstLine = userInput.split("\\s+");
        userInput = scan.nextLine();
        userInputSplitSecondLine = userInput.split("\\s+");
        for(String firstLineSplitted: userInputSplitFirstLine) {
            System.out.println(firstLineSplitted);
        }
        for(String secondLineSplitted: userInputSplitSecondLine) {
            System.out.println(secondLineSplitted);
        }
        scan.close();
    }
}

Если вы попробуете пример ввода, указанный выше, выход будет соответствовать примеру вывода выше.Однако если вы напишите более 3 слов в первую строку и / или более 2 слов во вторую строку, массив userInputSplitFirstLine размера 3 будет хранить более 3 слов.То же самое относится и к массиву userInputSplitSecondLine.Мой первый вопрос : как массив размера 3 (userInputSplitFirstLine) и массив размера 2 (userInputSplitSecondLine) могут содержать более 3 и 2 элементов соответственно?Мой второй вопрос заключается в том, как я могу ограничить / ограничить количество слов, которые пользователь может вставить в строку;например, первая строка только принимает 3 слова, а вторая строка только принимает 2 слова?

Также ответ на этот вопрос, предложенный Hyperskill.com, таков:следует:

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String wordOne = scanner.next();
        String wordTwo = scanner.next();
        String wordThree = scanner.next();
        String wordFour = scanner.next();
        String wordFive = scanner.next();

        System.out.println(wordOne);
        System.out.println(wordTwo);
        System.out.println(wordThree);
        System.out.println(wordFour);
        System.out.println(wordFive);
    }
}

Ответы [ 4 ]

0 голосов
/ 28 сентября 2019

Я думаю, что это должно сделать работу.Не стесняйтесь спрашивать, если у вас есть вопросы.

import java.util.Scanner;

class App {
    public static void main(String[] args) {
        final StringBuffer line = new StringBuffer();
        final StringBuffer words = new StringBuffer();

        try (final Scanner sc = new Scanner(System.in)) {
            while (sc.hasNextLine()) {
                final String currentLine = sc.nextLine();
                line.append(currentLine).append(System.lineSeparator());
                for (final String word : currentLine.split("\\s+")) {
                    words.append(word).append(System.lineSeparator());
                }
            }
        } finally {
            System.out.println(line.toString());
            System.out.println();
            System.out.println(words.toString());
        }
    }
}
0 голосов
/ 28 сентября 2019

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

while(true){
            if(scanner.hasNext()){
                System.out.println(scanner.next());
            }
            else{
                break;
            }
}
0 голосов
/ 28 сентября 2019

надеюсь, это поможет вам!

    public class pratice1 {
    public static void main (String[]args) {
    Scanner sc = new Scanner(System.in);
    String input = sc.nextLine();
    String input1 = sc.nextLine();
    char[]a =input.toCharArray();
    char[]a1 = input1.toCharArray();
    System.out.println(input +""+ input1);
    int a2=0;
    if(input!=null) {
    for(int i=0;i<input.length();i++) {
        if(a[i]==' ') { 
            a2=i;
            for(int j=0;j<a2;j++) {
                System.out.println(a[i]);
                a2=0;
            }
        }
        else System.out.print(a[i]);
    }System.out.println("");
    for(int i=0;i<input1.length();i++) {
        if(a1[i]==' ') {    
            a2=i;
            for(int j=0;j<a2;j++) {
                System.out.println(a1[i]);
                a2=0;
            }
        }
        else System.out.print(a1[i]);
    }
    }

}
}
0 голосов
/ 28 сентября 2019

Мой первый вопрос: как массив размером 3 (userInputSplitFirstLine) и массив размера 2 (userInputSplitSecondLine) могут содержать более 3 и 2 элементов соответственно?

массив здесь:

String[] userInputSplitFirstLine = new String[3];

не совпадает с тем, который вы получили от split:

userInputSplitFirstLine = userInput.split("\\s+");

Когда вы выполняете указанное выше назначение, старый массив, который был тамв основном «перезаписан», и теперь userInputSplitFirstLine относится к этому новому массиву, длина которого не зависит от того, что имел старый массив.split всегда возвращать новый массив.

Мой второй вопрос заключается в том, как я могу ограничить / ограничить количество слов, которые пользователь может вставить в строку;Например, первая строка принимает только 3 слова, а вторая - только 2 слова?

Это действительно зависит от того, что вы подразумеваете под «ограничить».Если вы просто хотите проверить, есть ли ровно три слова, и если нет, выйдите из программы, вы можете сделать это:

userInputSplitFirstLine = userInput.split("\\s+");
if (userInputSplitFirstLine.length != 3) {
    System.out.println("Please enter exactly 3 words!");
    return;
}

Вы можете сделать что-то похожее со второй строкой.

Если вы хотите, чтобы пользователь не мог вводить более 3 слов, то это невозможно, поскольку это приложение командной строки.

Кстати, код в предлагаемом решении работает, потому что next() возвращаетследующее слово (или то, что мы обычно называем словом), по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...