[英]How to ignore comma and print out elements using Arraylist<String>?
我想檢查輸入是否包含"Cheese Sandwich", "Corn Sandwich"
和"Mix Veg Sandwich"
。 條件是:
- 如果輸入的輸入與
Arraylist<String>
中存儲的元素匹配,則打印出元素。- 如果輸入與
Arraylist
中存儲的元素不匹配,則打印Incorrect Input
。- 如果輸入可以包含一個用逗號分隔的長字符串,它必須忽略逗號並打印出逗號之間的字符串。
在我的程序中,我創建了一個列表並將這三個字符串存儲在其中,然后循環它們並檢查輸入是否與存儲的元素匹配。 問題是當輸入以字符串的形式給出,然后用逗號添加這些元素時,它沒有給我任何或不正確的輸入。 如何忽略逗號並將要打印的字符串拆分如下。
例子:
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.