Java-02-02-03-StringJoiner
要高效拼接字符串,应该使用StringBuilder
。
很多时候,我们拼接的字符串像这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
public class Main { public static void main(String[] args) { String[] names = {"Bob", "Alice", "Grace"}; var sb = new StringBuilder(); sb.append("Hello "); for (String name : names) { sb.append(name).append(", "); } sb.delete(sb.length() - 2, sb.length()); sb.append("!"); System.out.println(sb.toString()); } }
|
类似用分隔符拼接数组的需求很常见,所以Java标准库还提供了一个StringJoiner
来干这个事:
1 2 3 4 5 6 7 8 9 10 11 12
| import java.util.StringJoiner;
public class Main { public static void main(String[] args) { String[] names = {"Bob", "Alice", "Grace"}; var sj = new StringJoiner(", "); for (String name : names) { sj.add(name); } System.out.println(sj.toString()); } }
|
慢着!用StringJoiner
的结果少了前面的"Hello "
和结尾的"!"
!遇到这种情况,需要给StringJoiner
指定“开头”和“结尾”:
1 2 3 4 5 6 7 8 9 10 11 12
| import java.util.StringJoiner;
public class Main { public static void main(String[] args) { String[] names = {"Bob", "Alice", "Grace"}; var sj = new StringJoiner(", ", "Hello ", "!"); for (String name : names) { sj.add(name); } System.out.println(sj.toString()); } }
|
String.join()
String
还提供了一个静态方法join()
,这个方法在内部使用了StringJoiner
来拼接字符串,在不需要指定“开头”和“结尾”的时候,用String.join()
更方便:
1 2
| String[] names = {"Bob", "Alice", "Grace"}; var s = String.join(", ", names);
|
练习
请使用StringJoiner
构造一个SELECT
语句:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class Main {
public static void main(String[] args) { String[] fields = {"name", "position", "salary"}; String table = "employee"; String select = buildSelectSql(table, fields); System.out.println(select); System.out.println("SELECT name, position, salary FROM employee".equals(select) ? "测试成功" : "测试失败"); }
static String buildSelectSql(String table, String[] fields) {
var sj = new StringJoiner(", ", "SELECT ", " FROM " + table); for (String field : fields) { sj.add(field); }
return sj.toString(); }
}
|
小结
用指定分隔符拼接字符串数组时,使用StringJoiner
或者String.join()
更方便;
用StringJoiner
拼接字符串时,还可以额外附加一个“开头”和“结尾”。