【问题标题】:How to exclude character appending if last element of ArrayList如果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;

标签: java c# for-loop arraylist


【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-11
        • 2016-12-24
        • 2020-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        相关资源
        最近更新 更多