如果 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。
我正在尝试使用 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。