使用 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");
}
}
}
我正在使用 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");
}
}
}