使用 if 语句将字符串与 Arrays.asList 值进行比较

Compare String to Arrays.asList values with if statement

我正在使用 FXML 创建用户界面。 有一个可以填写的TextField,还有一个可以点击的Button。

单击按钮时,应读取已填写的文本并将其与列表进行比较。

如果 TextField 包含等于 List 中的值的字符,则应在同一用户界面上的 Text 字段中显示某个字符串。

public class FXMLController {

      @FXML TextField input
      @FXML private Text actionContains

      @FXML protected void handleSubmitButtonAction(ActionEvent event) {

             List<String> n1 = Arrays.asList("44606", "44613", "44615", "44619"}

             String getInput = input.getText();

             if(Arrays.asList(n1).contains(getInput)) {
                  actionContains.setText("CONTAINS");
             } else {
                  actionContains.setText("DOES NOT CONTAIN");
             }
     }
}

运行 代码不是问题。 String getInput 的值等于输入文本,但 if 语句的结果始终为 "DOES NOT CONTAIN"。 输入的文本例如是“44606621”。

为了得到一个等于或不等于列表值的字符串(因此等于而不是包含),我已经切断了最后三个字符,但这对结果没有任何影响。

那是因为你将它放入 arrayList 两次,所以它变成了 arrayList of List 而不是 arrayList。

List<String> n1 = Arrays.asList("44606", "44613", "44615", "44619"}


Arrays.asList(n1); <--- makes it into [["44606", "44613", "44615", "44619"]]

改变if条件

 if(Arrays.asList(n1).contains(getInput)) {
...

 if(n1.contains(getInput)) {

我更改了我的代码:

List<String> n1 = new ArrayList<String>();
    n1.add("44606");
    n1.add("44615");

String getInput = input.getText();
String cutInput = getInput.substring(0,5);

if (n1.contains(cutInput) {
    actionContains.setText("CONTAINS");
} else {
    actionsContains.setText("DOES NOT CONTAIN");
}

更改输入以匹配列表值的字符数会生成有效的 if 语句。

您必须遍历列表并搜索该词是否包含列表中的任何元素,而不是其他方式。正确的算法是

 public void testW(){
    boolean flag = testContains(Arrays.asList("44606", "44613", "44615", "44619"),"44606621");
    System.out.println(flag);
    if(flag){
        actionContains.setText("CONTAINS");
    } else {
        actionContains.setText("DOES NOT CONTAIN");
    }
}

private boolean testContains(List<String> list, String word){
    for (int i = 0; i < list.size(); i++) {
        if(word.contains(list.get(i))){
            return true;
        }
    }
    return false;
}

您应该在数组的每个元素中查找字符串,而不是在数组中查找它。

所以用这个替换你的代码

public class FXMLController { 
@FXML TextField input 
@FXML private Text actionContains 
@FXML protected void handleSubmitButtonAction(ActionEvent event) { 
List<String> n1 = Arrays.asList("44606", "44613", "44615", "44619"}
String getInput = input.getText();

for(String s : n1) { 
  if(getinput.contains(s)) { 
      actionContains.setText("CONTAINS"); 
   } else { 
       actionContains.setText("DOES NOT CONTAIN"); 
   } 
} 
}