StringJoiner
2023-02-18 15:28:55 时间
要高效拼接字符串,应该使用StringBuilder
。
很多时候,我们拼接的字符串像这样:
// Hello Bob, Alice, Grace!
----
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
来干这个事:
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
指定“开头”和“结尾”:
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()
更方便:
String[] names = {"Bob", "Alice", "Grace"};
var s = String.join(", ", names);
练习
请使用StringJoiner
构造一个SELECT
语句:
import java.util.StringJoiner;
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) {
// TODO:
return "";
}
----
}
小结
用指定分隔符拼接字符串数组时,使用StringJoiner
或者String.join()
更方便;
用StringJoiner
拼接字符串时,还可以额外附加一个“开头”和“结尾”。
相关文章
- Material Design之CollapsingToolbarLayout 相关属性和方法介绍
- MaterialDesign之Dialog
- 在友盟分享的基础上集成微信登录
- 关于魅族手机 安装APP提示安装失败 更新包不兼容的解决方法
- java.lang.ExceptionInInitializerError 错误 解决方案
- Error in swirlExpectation(condition(object))
- 集成微信登录和分享真的很简单
- 推送SD K信鸽推送 和 个推推送 调研对比
- 主流的新闻APP 用的 推送SDK 记录
- 解决Webview加载不了https请求中的http图片
- 下拉刷新 AppBarLayout
- Java 8 环境变量设置
- Java Thread.join()详解
- 并发编程的挑战
- Windows10 搭建OpenGL ES 3.0 开发环境
- OpenGL ES 3.0 简介
- the bind value at index 2 is null
- OpenGL ES 3.0 Hello_Triangle
- OpenGL ES 着色语言
- 顶点属性、顶点数组和缓冲区对象