разделить ("") текстовую строку пользователя и напечатать первую букву в каждом утвержденном слове - PullRequest
0 голосов
/ 08 мая 2019

Предполагается, что пользователь вводит несколько слов (без учета строчных и прописных букв) с пробелом между ними, затем этот текст будет переведен в инициалы без пробелов. Однако мне нужны только инициалы тех слов, которые я одобряю, если что-то кроме этих слов, распечатка вместо этого скажет «?» вместо печати первого алфавита слова. E.q: «привет, привет, привет» будет выглядеть как «HHH», но вместо «привет, привет, привет» или «привет. Привет» вместо этого будет «H? H».

Мне удалось распечатать инициалы без пробелов. Но я не могу понять, как добавить условие, при котором программа сначала проверит, содержит ли введенные данные неутвержденные слова или знаки / символы, или нет, чтобы заменить это неутвержденное или несловарное знаком вопросительный знак вместо того, чтобы просто идти вперед и печать инициала / знака. Я попытался поместить цикл for в цикл if-else и использовать цикл switch () -, но они не будут корректно взаимодействовать с циклом for.

public static void main (String []args) {

    Scanner keyboard = new Scanner (System.in);
    System.out.println("Enter your words: ");

    String input = keyboard.nextLine().toUpperCase();
    String str = input;
    String[] parts = str.split(" ");

    System.out.print("The initials: ");
    for (String i : parts) {
        System.out.print(i.charAt(0));
    }
}

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

Ответы [ 4 ]

0 голосов
/ 08 мая 2019

Предполагается, что вы вводите неутвержденные слова в качестве входных аргументов

public static void main (String []args) {
    Set<String> unapprovedSet = new HashSet<>(Arrays.asList(args));
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Enter your words: ");

    String input = keyboard.nextLine().toUpperCase();
    String[] parts = input.split(" ");

    System.out.print("The initials: ");
    for (String i : parts) {
        if (unapprovedSet.contains(i)) {
            System.out.print("?");
        } else {
            System.out.print(i.charAt(0));
        }
    }
}
0 голосов
/ 08 мая 2019

Если вы хотите фильтровать слова, которые вам не нравятся, вам придется кодировать их.
Как в примере с "привет":

public static void main (String []args) {

    Scanner keyboard = new Scanner (System.in);
    System.out.println("Enter your words: ");

    String input = keyboard.nextLine().toUpperCase();
    String str = input;
    String[] parts = str.split(" ");

    System.out.print("The initials: ");
    for (String i : parts) {
        if(!"HI".equals(i))
          System.out.print(i.charAt(0));
        else
          System.out.print("?");
    }
}

Конечно, в реальной жизни вы хотите такое сравнение для коллекции, желательно чего-то быстрого, например HashSet:

public static void main (String []args) {

    Set<String> bannedWords=new HashSet<String>(Arrays.asList("HI","."));

    Scanner keyboard = new Scanner (System.in);
    System.out.println("Enter your words: ");

    String input = keyboard.nextLine().toUpperCase();
    String str = input;
    String[] parts = str.split(" ");

    System.out.print("The initials: ");
    for (String i : parts) {
        if(!bannerWords.contains(i))
          System.out.print(i.charAt(0));
        else
          System.out.print("?");
    }
}

(этот запрещает 'привет' и '.')

0 голосов
/ 08 мая 2019

Вы можете создать простой Набор , содержащий все слова, которые вы принимаете.Затем в цикле for для каждого String i вы проверяете, содержит ли набор `` i```.Если это правда, вы распечатываете i.charAt (0).В противном случае вы распечатываете «?».Я мог бы предоставить код для этого, если это необходимо, но всегда хорошо разобраться самому;)

0 голосов
/ 08 мая 2019

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

Примерно так:

...
Set<String> approved_words = new TreeSet<>();
approved_words.add("HELLO");
approved_words.add("GOODBYE");
...
for (String i : parts) {
  if (approved_words.contains(i))
    System.out.print(i.charAt(0));
  else
    System.out.print('?');
}
System.out.println();

Небольшое предложение:
Возможно, вы захотите разрешить пользователю вводить несколько слов между словами.
В этом случае разделите слова следующим образом: str.split(" +")

...