如果ArrayList的最后一个元素如何排除字符附加

Posted

技术标签:

【中文标题】如果ArrayList的最后一个元素如何排除字符附加【英文标题】:How to exclude character appending if last element of ArrayList 【发布时间】:2015-03-16 01:47:21 【问题描述】:

我正在尝试使用for() 循环构建一个字符串来迭代ArrayList 的元素。我想在将 ArrayList 的每个元素附加到我正在构建的 String 之后附加一个逗号,但我不想在附加 ArrayList 的最后一个元素之后附加一个逗号。

这是我迄今为止尝试过的,但在最后一个元素之后仍然添加了一个逗号。

public String buildWOEIDQuery(ArrayList searchCriteria)

    String query = "http://where.yahooapis.com/v1/places.q('";
    for (int i = 0; i < searchCriteria.Count; i++ )
    
        if(searchCriteria.)

        query += (String)searchCriteria[0];
        if(i != searchCriteria.Count)
        
            query += ",";
        
    
    query += "')?appid=" + devKey;

    return query;

例如,如果有 3 个搜索条件,则查询最终应如下所示:

http://where.yahooapis.com/v1/places.q('criteria1,criteria2,criteria3')?appid=dj0yJmk9Tm

如果i 等于 ArrayList 的 Count,那不是将其作为列表的最后一个元素,因此不应该附加逗号吗?

【问题讨论】:

不要再使用ArrayList。它属于 C# 没有泛型的旧时代。请改用List&lt;T&gt; 【参考方案1】:

不要使用ArrayList;改用List&lt;string&gt; 甚至更好的IEnumerable&lt;string&gt;。如果你使用string.Join(),你的代码会更优雅。它是为像您这样的要求量身定制的。完整的解决方案如下:

public string buildWOEIDQuery(IEnumerable<string> searchCriteria)

    string query = "http://where.yahooapis.com/v1/places.q('";
    query += string.Join(",", searchCriteria);
    query += "')?appid=" + devKey;

    return query;

您可以在 SO 上查看similar question。

【讨论】:

【参考方案2】:

问题 1: 你的条件 if(i != searchCriteria.Count) 永远不会为真,因为如果 i 等于 ArrayList.Count,你的 for 循环将不会进入。

所以你需要有条件if(i != searchCriteria.Count) 来跳过最后一项的逗号。

您也可以使用TrimEnd() 函数删除最后一个逗号。

试试这个:

query = query.TrimEnd(',');

问题 2: 在您的循环中,您将值零硬编码以始终从 ArrayList 获取第一个元素

替换这个:

query += (String)searchCriteria[0];

有了这个:

query += (String)searchCriteria[i];

建议 1:不要使用 ArrayList,因为它是旧版,您可以使用 Generic List&lt;T&gt;

完整代码:

public String buildWOEIDQuery(List<string> searchCriteria)

    String query = "http://where.yahooapis.com/v1/places.q('";
    for (int i = 0; i < searchCriteria.Count; i++ )
    
       query += searchCriteria[i] + ",";        
    
    query = query.TrimEnd(',');
    query += "')?appid=" + devKey;

    return query;

【讨论】:

【参考方案3】:

您的检查不起作用的原因是 i 在循环的最后一次迭代中等于 searchCriteria.Count-1。所以你可以修改你的 if 检查是i != searchCriteria.Count-1

作为替代方案,您可以绕过检查并使用TrimEnd 函数在循环后修剪掉多余的字符。

var query = "a,b,c,";
query = query.TrimEnd(',');
MessageBox.Show(query);    // a,b,c

【讨论】:

以上是关于如果ArrayList的最后一个元素如何排除字符附加的主要内容,如果未能解决你的问题,请参考以下文章

如何检测一个元素是不是是数组中的最后一个元素?

如何从ArrayList中删除重复的字符串[重复]

只有当 ArrayList 到达它的最后一个元素时,如何执行代码?

Arraylist交换元素[重复]

如何从 ArrayList 中删除重复的元素?

Java ArrayList中去掉相同的元素并保留相同元素中的最后一个