【问题标题】:How to check arraylist contains this particular word in android?如何检查arraylist在android中包含这个特定的单词?
【发布时间】:2014-02-12 10:18:35
【问题描述】:

我有ArrayList<String>,因为我添加了 3-4 个网站名称。比如,http://www.google.comhttps://www.stackoverflow.com 等。现在在我的应用程序中,如果我只输入“google”,那么我想将“google”这个词与ArrayList<String> 进行比较。

我被困在这里。谁能告诉我如何将字符串与数组对象进行比较?

提前致谢。

【问题讨论】:

  • 如果你想在不使用循环的情况下做到这一点,那么你需要编写自己的 ArrayList 类。并编写 contains() 的实现。但是在那里你需要循环。

标签: android arraylist


【解决方案1】:

为此,您需要覆盖 contains() 的实现。我给你举个简单的例子。

自定义 ArrayList 类

public class MyArrayList extends ArrayList<String> {
    private static final long serialVersionUID = 2178228925760279677L;

    @Override
    public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }

    @Override
    public int indexOf(Object o) {
        int size = this.size(); 
        if (o == null) {
            for (int i = 0; i < size ; i++) {
                if (this.get(i) == null) {
                    return i; 
                }
            }
        } else {
           for (int i = 0; i < size ; i++) {
                if (this.get(i).contains(String.valueOf(o))) {
                    return i; 
                }
            }
        }
        return -1;
    }
}

如何使用

MyArrayList arrayList = new MyArrayList(); 
arrayList.add("http://www.google.com");
arrayList.add("https://www.stackoverflow.com");
arrayList.add("http://pankajchunchun.wordpress.com");

if (arrayList.contains("google")) {
    System.out.println("ArrayList Contains google word");
}

if (arrayList.contains("igoogle")) {
    System.out.println("ArrayList Contains igoogle word");
} else {
    System.out.println("ArrayList does not Contains igoogle word");
}

以下是上述代码示例的输出

ArrayList Contains google word
ArrayList does not Contains igoogle word

有关更多自定义实现,请参阅ArrayList Source Code

【讨论】:

  • 是的,我只在同一个地方工作。太感谢了。我想它会起作用的。为你 +1。
【解决方案2】:

ArrayList.contains() 通过等号测试字符串。来自文档:

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

示例:

boolean contains = yourArrayListInstance.contains(yourString);

编辑。如果要检查子字符串,必须循环 ArrayList 的内容并调用 String.contains

【讨论】:

  • 你能举个小例子吗?
  • anddev 似乎想检查其中一个包含的字符串是否包含子字符串。
  • anddev 你想要子串吗?
  • @PankajKumar 是的,你是对的,包含不起作用。我们需要将对象作为 ArrayList.contains() 的参数传递。但我只有字符串值。
【解决方案3】:

你可以遍历你的 ArrayList&lt;String&gt; 喜欢

public String getWebsiteName(String toMatchString)
{
    ArrayList<String> yourArrayList = new ArrayList<String>();

    for (String webSiteName : yourArrayList)
    {
        if (webSiteName.contains(toMatchString))
            return webSiteName;
    }
    return null;
}

并获得匹配的String

【讨论】:

  • 是的,没错。但是在我的应用程序中,我有很多数据要比较。所以从性能的角度来看 for 循环对我不起作用。
  • 有没有其他方法可以获取正确的数据?我在谷歌上搜索,发现我可以制作 Comparable。但我不知道如何使用它。你能给我举个例子吗?
  • 您需要执行for 循环来获取String,但如果您的@987654328 中不存在String,您可以采取措施防止进入for 循环@。例如。使用toStringArrayList 更改为String,然后检查其中是否存在要匹配的字符串。
【解决方案4】:

使用这样的辅助函数

public static boolean containsSubString(ArrayList<String> stringArray, String substring){
    for (String string : stringArray){
        if (string.contains(substring)) return true;
    }
    return false;
}

【讨论】:

  • String 字符串参数没用
  • 我可以不使用 for 循环吗?
  • @DoctororDrive 抱歉,已更正。不,你需要循环。
  • @FD_ 又错了。第一个参数应该是 ArrayList,而不是 String。并且你必须在 for 循环中包含一个类型。
  • @DoctororDrive 是的,对不起,我好像有点糊涂了,现在修好了。
猜你喜欢
  • 2012-01-08
  • 1970-01-01
  • 2017-11-10
  • 2018-12-09
  • 1970-01-01
  • 2011-05-20
相关资源
最近更新 更多