我有这个方法:
public String nodePropertyGenerator(Map<String,Object> properties){
String prop="";
for(Map.Entry<String, Object> entry : properties.entrySet()) {
prop += entry.getKey() + ":'" +entry.getValue()+"' ,";
Iterator iterator = properties.entrySet().iterator();
}
return prop;
}
我想这个方法返回一个这样的字符串:
name:'hossein' , age:'24' , address:'khorram'
所以我想检查我的地图元素是否为结尾元素,它会删除&#34;,&#34;从字符串的结尾。怎么做。请帮我。感谢
答案 0 :(得分:4)
一种方法是添加boolean
变量,在进入循环之前将其设置为true
,然后使用它来确定在添加下一个之前是否需要逗号组件,像这样:
boolean isFirst = true;
StringBuilder res = new StringBuilder();
for (Map.Entry<String, Object> entry : properties.entrySet()) {
if (!isFirst) {
res.append(", ");
}
isFirst = false;
res.append(entry.getKey());
res.append(":'");
res.append(entry.getValue());
res.append("'");
}
请注意,在循环中对不可变字符串使用连接运算符效率很低。您应该使用StringBuilder
代替。
答案 1 :(得分:2)
您无法判断当前迭代是否是最后一次迭代。我建议您使用StringBuilder
而不是重复的字符串连接,然后在最后修剪长度:
StringBuilder builder = new StringBuilder();
for (Map.Entry<String, Object> entry : properties.entrySet()) {
builder.append(entry.getKey())
.append(":'")
.append(entry.getValue())
.append("' ,");
}
if (builder.length() > 0) {
builder.setLength(builder.length() - 2);
}
return builder.toString();
答案 2 :(得分:2)
Java 8有一个类来执行此操作:java.util.StringJoiner
您可以这样使用它:
StringJoiner stringJoiner = new StringJoiner("' ,");
for(Map.Entry<String, Object> entry : properties.entrySet()) {
stringJoiner.add(entry.getKey() + ":'" +entry.getValue());
}
return stringJoiner.toString();
或者您可以使用Stream
执行此操作:
return properties.entrySet().stream()
.map(entry -> entry.getKey() + ":'" +entry.getValue())
.collect(Collectors.joining("' ,"));