比较前3个字符的字符串和每个字符串的前3个字符的字符串列表

时间:2019-01-05 05:44:59

标签: java

需要解决的示例代码?

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 ****");
        }

    }

}

应该返回找到的匹配项,但找不到匹配项。

5 个答案:

答案 0 :(得分:2)

您当前未比较前三个字符,因为subList实际上并未应用子字符串函数(此处将按原样复制列表)。您还可以更有效地初始化List(并且您应该编程到List接口)。我会使用stream()map String.substringanyMatch每个元素。喜欢,

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 ***

答案 1 :(得分:1)

您不是在比较列表中的完整ERROR TypeError: this.join is not a function,而是列表中字符串之一的子字符串。

您将不得不遍历该列表,并逐一检查每个import { Injectable } from '@angular/core'; import * as io from 'socket.io-client'; import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root' }) export class ChatService { private url = 'http://localhost:5000/'; private socket; constructor() { this.socket = io(this.url, { "query": "token=XXXX" }); this.socket.on('connect', function () { console.log("Connection Made."); this.join(); }); } public join(): void { this.socket.emit('join', { "login_token": "XXXX" }); } public sendMessage(message) { this.socket.emit('message', message); } public getMessages = () => { return Observable.create((observer) => { this.socket.on('new-message', (message) => { observer.next(message); }); }); } }

String

答案 2 :(得分:0)

这就是你应该做的。

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 ****");
}

浏览列表,检查每个条目,直到找到匹配项。

答案 3 :(得分:0)

List.contain(Object o)检查“对象”是否在列表中。在您的情况下,列表中的对象是String,它们是“ 111XXXX1”,“ 122XXX1”和“ 122XXX1”。因此,如果以下内容仅返回true

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

但是,如果执行以下操作,它将返回false:

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

这是javadoc对List.contains(Object o)所说的

如果此列表包含指定的元素,则返回true。更正式地说,当且仅当此列表包含至少一个元素(e == null?e == null:o.equals(e))时,才返回true。

因此您可以看到它确定对象是否相等。因此,ArrayList中的所有项目都不匹配“ 123”。因此,您将获得“未找到匹配项”

答案 4 :(得分:0)

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 ****");
    }
}`