【问题标题】:Search String with Arraylist in android在android中使用Arraylist搜索字符串
【发布时间】:2015-07-21 08:19:35
【问题描述】:

在我的 android 应用程序中,我尝试将字符串与 arraylist 进行比较,看看我下面的代码

ArrayList<String> namelist = new ArrayList<String>();
        ArrayList<String> withoutcomma = new ArrayList<String>();

        namelist.add("chennai , In");
        namelist.add("mumbai, In");
        namelist.add("Usak,TR");
        namelist.add("Ushuaia,AR");
        namelist.add("San Francisco,US");

        for (int i = 0; i < namelist.size(); i++) {
            String[] value = namelist.get(i).split("\\s*,\\s*");
            withoutcomma.add(value[0]);
            withoutcomma.add(value[1]);
        }

        String name = "i want to go chennai to mumbai";
        String[] splitname = name.split(" ");

        for (int i = 0; i < splitname.length; i++) {
            if (withoutcomma.contains(splitname[i])) {
                System.out.println(splitname[i]);
            }
        }

它返回正确的输出

chennai 
mumbai

但无法获得 san fransisco 的价值,因为空白,我完全被震惊了,即使我使用了 Pattern 和匹配但无法处理空白

有人可以帮忙吗??

【问题讨论】:

  • 你为什么不直接.split(",");
  • 在这种情况下不可能。因为拆分名称时无法获得旧金山。

标签: android arraylist string-comparison


【解决方案1】:

您可以在String name 中查找withoutcomma 数组的值,而不是按空格进行拆分。

for (String str : withoutcomma)
{
    if (name.contains(str))
    {
        System.out.println("Found city: " + str + " at position: " + name.indexOf(str));
    }
}

如果城市的顺序很重要,您可以将在String name 中找到的值的索引保存为int idx = name.indexOf(str)

【讨论】:

  • 非常感谢它的帮助
  • 我又面临一个问题,当我使用此代码时,它返回所有与城市 ex 匹配的字符串:我的 arral 列表同时具有 san fransico 和 san 然后此代码同时返回 san 和 san fransisco ,我们只需要旧金山
  • 可以使用break;并继续;控制for循环?像添加中断;当您想在第一次匹配时停止到 if 语句?
  • 不,我认为它不起作用,因为如果我需要的字符串位于数组末尾,解决方案是什么,即使我不确定我的第一个匹配是我想要的,我需要完全匹配,任何想法
  • 我现在明白了,你可以添加 if-s 来检查字符串是否正是你想要的吗?
【解决方案2】:

在逗号和任何空格处拆分单词。因此,当您获得多个单词的地名时,将其存储在数组中,然后使用它进行比较。对我有用。

使用这个:

    ArrayList<String> namelist = new ArrayList<String>();
    ArrayList<String> withoutcomma = new ArrayList<String>();

    namelist.add("chennai , In");
    namelist.add("mumbai, In");
    namelist.add("Usak,TR");
    namelist.add("Ushuaia,AR");
    namelist.add("San Francisco,US");

    for (int i = 0; i < namelist.size(); i++) {
        String[] value = namelist.get(i).split("[(\\s*,\\s*)\\s]");
        for(String word : value) {
            withoutcomma.add(word);
        }
    }

    String name = "i want to go San Francisco to mumbai";
    String[] splitname = name.split(" ");

    for (int i = 0; i < splitname.length; i++) {
        if (withoutcomma.contains(splitname[i])) {
            System.out.println(splitname[i]);
        }
    }

【讨论】:

  • 不,它给了我单独的输出
【解决方案3】:

您可以使用 trim() 来省略旧金山的空格,

改变

 String[] value = namelist.get(i).split("\\s*,\\s*");

 String[] value = namelist.get(i).trim().split("\\s*,\\s*");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-04
    • 1970-01-01
    • 2020-03-21
    • 2015-05-26
    相关资源
    最近更新 更多