簡體   English   中英

比較前3個字符的字符串和每個字符串的前3個字符的字符串列表

[英]Compare First 3 Character String with List of String of Each String First 3 Character

樣本代碼需要哪些解決方案?

public class TestJJava {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String abc="123XXXXX0";

        ArrayList<String> lstValues = new ArrayList<String>();
        lstValues.add("111XXXX1");
        lstValues.add("122XXX1");
        lstValues.add("123XXXX1");
        if(lstValues.subList(0, 3).contains(abc.substring(0, 3))){
            System.out.println("**** Match Found ***");
        }else{
            System.out.println("**** No Match Found ****");
        }

    }

}

應該返回找到的匹配項,但找不到返回的匹配項。

您目前未比較前三個字符,因為subList實際上並未應用子字符串函數(此處它按原樣復制列表)。 您還可以更有效地初始化List (並且應該對List接口進行編程)。 我將stream()並使用String.substringanyMatch map每個元素。 喜歡,

String abc = "123XXXXX0";
List<String> lstValues = new ArrayList<>(List.of("111XXXX1", "122XXX1", "123XXXX1"));
if (lstValues.stream().map(x -> x.substring(0, 3)).anyMatch(abc.substring(0, 3)::equals)) {
    System.out.println("**** Match Found ***");
} else {
    System.out.println("**** No Match Found ****");
}

哪個輸出

**** Match Found ***

您不是在比較列表中的完整String而是列表中字符串之一的子字符串。

您將必須遍歷該列表,並分別檢查每個String

String temp = abc.substring(0,3);
boolean flag = true;
for(String value: lstValues.subList(0, 3))
 if(value.contains(temp)) // or if(value.indexOf(temp) != -1)
  {
    System.out.println("**** Match Found ****");
    flag = false;
    break;
  }
if(flag)
  System.out.println("**** No Match Found ****");

這就是您應該做的。

String first3 = abc.substring(0,3);
boolean found = false;
for (String s : lstValues) {
    if (s.startsWith(first3)) {
        found = true;
        break;
    }
}

if (found) {
    System.out.println("**** Match Found ***");
} else {
    System.out.println("**** No Match Found ****");
}

瀏覽列表,檢查每個條目,直到找到匹配項。

List.contain(Object o)檢查“對象”是否在列表中。 在您的情況下,列表中的對象是String,它們是“ 111XXXX1”,“ 122XXX1”和“ 122XXX1”。 因此,如果以下內容僅返回true

lstValues.contain("111XXXX1") ->真lstValues.contain("122XXX1") ->真lstValues.contain("122XXX1") ->真

但是,如果執行以下操作,它將返回false:

lstValues.contain(“ 123”)-> false。

這是javadoc對List.contains(Object o)的描述

如果此列表包含指定的元素,則返回true。 更正式地講,當且僅當此列表包含至少一個元素(e == null?e == null:o.equals(e))時,返回true。

因此,您可以看到它確定對象是否相等。 因此,ArrayList中的所有項目都不匹配“ 123”。 因此,您將獲得“未找到匹配項”

Java 1.7

嘗試這個 ..

`public static void main(String[] args) {

    String abc = "123XXXXX0";

    ArrayList<String> lstValues = new ArrayList<String>();
    lstValues.add("111XXXX1");
    lstValues.add("122XXX1");
    lstValues.add("123XXXX1");

    boolean found = false;

    for (String temp : lstValues.subList(0, 3)) {
        if (temp.contains(abc.substring(0, 3))) {
            found = true;
            break;
        }
    }

    if (found) {
        System.out.println("**** Match Found ***");
    } else {
        System.out.println("**** No Match Found ****");
    }
}`

暫無
暫無

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

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