12

我有这段代码搜索字符串数组并在输入字符串与字符串的第一个字符匹配时返回结果:

for (int i = 0; i < countryCode.length; i++) {
            if (textlength <= countryCode[i].length()) {
                if (etsearch
                        .getText()
                        .toString()
                        .equalsIgnoreCase(
                                (String) countryCode[i].subSequence(0,
                                        textlength))) {
                    text_sort.add(countryCode[i]);
                    image_sort.add(flag[i]);
                    condition_sort.add(condition[i]);
                }
            }
        }

但我也想得到那些字符串,输入字符串不仅在第一个字符中匹配,而且在字符串中的任何位置都匹配?这个怎么做?

4

7 回答 7

27

您可以通过三种方式搜索字符串是否包含子字符串:

String string = "Test, I am Adam";
// Anywhere in string
b = string.indexOf("I am") > 0;         // true if contains 

// Anywhere in string
b = string.matches("(?i).*i am.*");     // true if contains but ignore case

// Anywhere in string
b = string.contains("AA")  ;             // true if contains but ignore case
于 2012-05-24T15:33:49.900 回答
8

我没有足够的“声誉点”在评论中回复,但接受的答案有错误。indexOf() 在找不到子字符串时返回 -1,所以它应该是:

    b = string.indexOf("I am") >= 0; 
于 2015-03-31T11:18:19.197 回答
3

看看contains(CharSequence)方法

于 2012-05-24T15:26:05.453 回答
0

尝试这个-

etsearch.getText().toString().contains((String) countryCode[i]);
于 2012-05-24T15:26:16.417 回答
0

你可以使用包含。如:

myString.contains("xxx");

另请参阅:http ://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html ,特别是包含区域。

于 2012-05-24T15:42:09.507 回答
0

使用以下内容:

public boolean contains (CharSequence cs)

自:API 级别 1

确定此 String 是否包含传递的 CharSequence 中的字符序列。

Parameters

cs 要搜索的字符序列。

Returns

如果字符序列包含在此字符串中,则为 true,否则false

于 2012-05-24T15:43:43.283 回答
0

实际上,android 中默认的 Arrayadapter 类似乎只从整个单词的开头搜索,但通过使用自定义 Arrayadapter 类,您可以搜索任意字符串的一部分。我已经创建了整个自定义类并发布了库。这是非常容易使用。您可以从此处或单击下面提供的链接检查实施和使用情况。

https://github.com/mohitjha727/Advanced-Search-Filter

你可以参考这个简单的例子——我们有名字“Mohit”和“Rohan”,如果我们只输入“M”,那么 Mohit 就会出现在搜索结果中,但是当我们输入“oh”时,Mohit 和 Rohan 都会出现有共同的字母“哦”。

谢谢你。

于 2020-07-29T13:32:16.010 回答