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

How to exclude character appending if last element of ArrayList

我正在尝试使用 for() 循环来迭代 ArrayList 的元素来构建一个字符串。我想在 ArrayList 的每个元素附加到我正在构建的字符串后附加一个逗号,但我不想在 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 的计数,这不是使它成为列表的最后一个元素,因此不应该附加逗号吗?

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

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

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

问题 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,因为它是旧版,您可以使用通用 List<T>.

完整代码:

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;
}

不要使用ArrayList;使用 List<string> 或更好的 IEnumerable<string> 代替。如果使用 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