2

我正在尝试在 Java 中复制 php 函数 implode()。

这是我做的:

private String implode(String delimiter, Map<String, String> map){

   StringBuilder sb = new StringBuilder();

   for(Entry<String, String> e : map.entrySet()){
      sb.append(" "+delimiter+" ");
      sb.append(" " + e.getKey() + " = '" + e.getValue() + "' ");
   }

   return sb.toString();
}

测试:

Map<String, String> myList = new HashMap<String, String>();
myList.put("address", "something1");
myList.put("last_name", "something2");
myList.put("first_name", "something3");

update_database("dummy", myList, "");

public void update_database(String table, Map<String, String> update_list, String condition){
   String query = "UPDATE " + table + " SET ";

   query += implode(",", update_list) + " " + condition;

    System.out.println(query);
}

输出:

更新虚拟 SET,地址 = 'something',last_name = 'something2',first_name = 'something3'

如果您以前使用过 mysql,您就会知道它不是一个有效的查询,因为字符串查询以“,”开头。

如何格式化我的字符串以获得正确的查询?

4

2 回答 2

6

你可以尝试这样的事情:

自己的实现

private String implode(String delimiter, Map<String, String> map){

   boolean first = true;
   StringBuilder sb = new StringBuilder();

   for(Entry<String, String> e : map.entrySet()){
      if (!first) sb.append(" "+delimiter+" ");
      sb.append(" " + e.getKey() + " = '" + e.getValue() + "' ");
      first = false;
   }

   return sb.toString();
}

字符串实用程序

另一种解决方案是使用public static String join(Collection collection, char separator)

于 2013-05-09T19:10:21.617 回答
3

你不需要自己写这个。 谷歌已经有一个名为 guava 的具有此功能的库它有一个名为 Joiner 的类。这是一个例子:

Joiner joiner = Joiner.on("; ").skipNulls();
return joiner.join("Harry", null, "Ron", "Hermione");

这将返回字符串“Harry; Ron; Hermione”。请注意,在追加之前,所有输入元素都使用 Object.toString() 转换为字符串。

于 2013-05-09T19:12:21.907 回答