我正在尝试使用for()
循环构建一个字符串来迭代ArrayList
的元素。我希望在将ArrayList的每个元素附加到我构建的String之后追加一个昏迷,但是我不想在追加ArrayList的最后一个元素之后追加昏迷。 / p>
这是我到目前为止所尝试的,但在最后一个元素之后仍然会加入昏迷。
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,那么是不是使它成为列表的最后一个元素,因此不应该附加昏迷?
答案 0 :(得分: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;
}
答案 1 :(得分:1)
检查不起作用的原因是i
在循环的最后一次迭代中等于searchCriteria.Count-1。因此,您可以将if检查修改为i != searchCriteria.Count-1
作为替代方案,您可以绕过检查并使用TrimEnd
功能在循环后剪掉多余的字符。
var query = "a,b,c,";
query = query.TrimEnd(',');
MessageBox.Show(query); // a,b,c
答案 2 :(得分: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。