如果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<T>
。
【参考方案1】:
不要使用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。
【讨论】:
【参考方案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<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;
【讨论】:
【参考方案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的最后一个元素如何排除字符附加的主要内容,如果未能解决你的问题,请参考以下文章