簡體   English   中英

如何使用 Arraylist 忽略逗號並打印出元素<string> ?</string>

[英]How to ignore comma and print out elements using Arraylist<String>?

我想檢查輸入是否包含"Cheese Sandwich", "Corn Sandwich""Mix Veg Sandwich" 條件是:

  1. 如果輸入的輸入與Arraylist<String>中存儲的元素匹配,則打印出元素。
  2. 如果輸入與Arraylist中存儲的元素不匹配,則打印Incorrect Input
  3. 如果輸入可以包含一個用逗號分隔的長字符串,它必須忽略逗號並打印出逗號之間的字符串。

在我的程序中,我創建了一個列表並將這三個字符串存儲在其中,然后循環它們並檢查輸入是否與存儲的元素匹配。 問題是當輸入以字符串的形式給出,然后用逗號添加這些元素時,它沒有給我任何或不正確的輸入。 如何忽略逗號並將要打印的字符串拆分如下。

例子:

String Input = "Cheese Sandwich, Corn Sandwich, Mix Veg Sandwich"; 

預計 Output

cheese sandwich
corn sandwich 
mix veg sandwich

我的程序

static void storeElements(String input) {

    List<String> sandwiches = new ArrayList<>();
    sandwiches.add("corn sandwich");
    sandwiches.add("mix veg sandwich");
    sandwiches.add("cheese sandwich");
    sandwiches.add("mix veg sandwich");
    sandwiches.add("cheese sandwich");
   

    boolean a = sandwiches.contains(input);
    boolean b = input.contains(",");

    List<String> list = new ArrayList(Arrays.asList(input.split(",")));

我不知道如何讓這個ArrayList檢查字符串輸入中的逗號,然后驗證輸入是否與存儲的ArrayList三明治中的元素之一匹配。

    for (int i = 0; i < input.length(); i++) {
        if (b) {
                for (String c : sandwiches) {
                    if (a) {
                        System.out.println(c);
                    }
                    else {
                        System.out.println("Incorrect Input");
                    }
                }
        }
    }
}

這是您的初始代碼,帶有一些注釋

   static void storeElements(String input) {
            List<String> sandwiches = new ArrayList<>();
            sandwiches.add("corn sandwich");
            sandwiches.add("mix veg sandwich");
            sandwiches.add("cheese sandwich");
            sandwiches.add("mix veg sandwich");
            sandwiches.add("cheese sandwich");               
    
            boolean a = sandwiches.contains(input); // boolean a is set here, and it is never changed. So, if you enter "cheese sandwich, mix veg sandwich" a will never become true.
            boolean b = input.contains(",");
    
            List<String> list = new ArrayList(Arrays.asList(input.split(",")));
    
            for (int i = 0; i < input.length(); i++) {
                if (b) {
                        for (String c : sandwiches) { // You shouldn't be iterating over sandwiches, but over list
                            if (a) { // a is not dependent on your c. this test should only be done if b is false. here, you need to check if an element of list is in sandwiches
                                System.out.println(c);
                            }
                            else {
                                System.out.println("Incorrect Input");
                            }
                        }
                }
            }
        }

修改后的代碼

static void storeElements(String input) {
    List<String> sandwiches = new ArrayList<>();
    sandwiches.add("corn sandwich");
    sandwiches.add("mix veg sandwich");
    sandwiches.add("cheese sandwich");
    sandwiches.add("mix veg sandwich");
    sandwiches.add("cheese sandwich");

    boolean a = sandwiches.contains(input);
    boolean b = input.contains(",");

    List<String> list = new ArrayList(Arrays.asList(input.split(", ")));


        if (b) {
            for (String c : list) {
                System.out.println(sandwiches.contains(c) ? c : "Incorrect Input");
            }
        } else {
            System.out.println(a ? input : "Incorrect Input"); // here it makes sense to check if a is true
        }
}

可以簡化為:

static void storeElements(String input) {
    List<String> sandwiches = new ArrayList<>();
    sandwiches.add("corn sandwich");
    sandwiches.add("mix veg sandwich");
    sandwiches.add("cheese sandwich");
    sandwiches.add("mix veg sandwich");
    sandwiches.add("cheese sandwich");

    List<String> list = new ArrayList(Arrays.asList(input.split(", ")));
    for (String c : list) {
      System.out.println(sandwiches.contains(c) ? c : "Incorrect Input");
    }
}

在我原來的答案中,我有 split(","),我從原來的副本中復制了它,但我忽略了這一點:

如果您對“奶酪三明治,玉米三明治”執行 split(","),您將得到“奶酪三明治”和“玉米三明治”。 第一個會被發現,第二個不會,因為“玉米”與“玉米”不同,所以空間確實有所不同。

編輯:如果沒有匹配,只打印不正確的輸入。

static void storeElements(String input) {
    List<String> sandwiches = new ArrayList<>();
    sandwiches.add("corn sandwich");
    sandwiches.add("mix veg sandwich");
    sandwiches.add("cheese sandwich");
    sandwiches.add("mix veg sandwich");
    sandwiches.add("cheese sandwich"); // this line is not relevant, the value is already in sandwiches

    List<String> list = new ArrayList(Arrays.asList(input.split(", ")));
    List<String> result = new ArrayList<>();
    
    for (String c : list) {
      if ( sandwiches.contains(c)) {
          result.add(c); // only add the String if it is found in the original list
      } else {
              result.clear();
              break;
      }
    }

    if ( result.isEmpty()) {
        // this will only happen if no elements have been added to the result list
        System.out.println("Incorrect input");
    } else {
        for ( String found : result ) {
            System.out.println(found);
        }
    }
}

您可以通過意識到您只需要考慮一種輸入來大大簡化事情:逗號分隔的項目列表。 "Cheese Sandwich, Corn Sandwich, Mix Veg Sandwich"顯然是一個逗號分隔的列表,包含三個項目。 "Cheese Sandwich"不太明顯,它是 _also,一個逗號分隔的列表,只有一個項目。

因此,只需將所有輸入作為逗號分隔的列表處理,一切就變得不那么復雜了:

static void storeElements(String input) {

        List<String> sandwiches = new ArrayList<>();
        sandwiches.add("corn sandwich");
        sandwiches.add("mix veg sandwich");
        sandwiches.add("cheese sandwich");
        sandwiches.add("mix veg sandwich");
        sandwiches.add("cheese sandwich");
       
        List<String> list = new ArrayList(Arrays.asList(input.split("\\s*,\\s*")));

        for (String item : list) {
            item = item.toLowerCase();
            if (sandwiches.contains(item) {
                System.out.println("Yes, we have " + item);
            } else {
                System.out.println("Incorrect input");
            }
        }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM