【问题标题】:split(" ") user text string and printing the first letter in each approved wordsplit(" ") 用户文本字符串并打印每个批准的单词中的第一个字母
【发布时间】:2019-05-08 10:43:12
【问题描述】:

用户应该输入多个单词(不考虑小写/大写),中间有空格,然后此文本将被翻译成首字母,不包含任何空格。但是,我只想要我认可的单词的首字母,如果不是这些单词,打印输出会改为“?”而不是打印单词的第一个字母。 E.q: "hello hello hello" 会输出为:"HHH",但 "hello hi hello" 或 "hello . hello" 会改为 "H?H"。

我设法让它打印出不带空格的首字母。但我不知道如何添加一个条件,程序将首先检查输入是否包含未经批准的单词或符号/符号,以便用问号替换未经批准或非单词,而不是继续前进打印首字母/符号。我尝试将 for 循环放在 if-else-loop 中并使用 switch()-loop,但它们不会与 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));
    }
}

所以现在发生的情况是,无论用户输入什么单词,都会打印每个单词或符号/符号的首字母。

【问题讨论】:

  • 在 for 循环中你可以添加 "If (condition) " { System.out.print(i.charAt(0)); } else { do nothing },我建议条件是检查您的“部分”是否存在于已批准的单词列表中。

标签: java arrays split char charat


【解决方案1】:

您应该创建一组批准的单词,然后检查用户输入的每个单词是否都属于该组。

类似这样的:

...
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(" +")

【讨论】:

    【解决方案2】:

    如果您想过滤掉您不喜欢的字词,则必须对其进行编码。
    就像带有“hi”的例子:

    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("?");
        }
    }
    

    (这个禁止'hi'和'.')

    【讨论】:

    • @JanRek: String input=takeInput(); 和 translateInput(input); 例如可以工作。
    【解决方案3】:

    您可以创建一个简单的Set,其中包含您接受的所有单词。然后在你的for循环中,对于每个String i,你检查集合是否包含`i`。如果这是真的,你打印出 i.charAt(0)。否则你打印出“?”。 如有必要,我可以为此提供代码,但自己弄清楚总是好的;)

    【讨论】:

      【解决方案4】:

      假设您提供未经批准的单词作为输入参数

      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));
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-21
        • 1970-01-01
        • 1970-01-01
        • 2022-08-23
        • 1970-01-01
        • 1970-01-01
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多