网站首页 > java教程 正文
1.简介
Java提供了大量专用于 连接 字符串 的方法和类 。
在本教程中,我们将深入研究其中的几个,并 概述一些常见的陷阱和不良做法。
2. StringBuilder
首先是简陋的 StringBuilder。 此类 提供了一个 String 构建实用程序数组 ,可以轻松处理 String 操作。
让我们使用 StringBuilder 类构建 String 连接 的快速示例 :
StringBuilder stringBuilder = new StringBuilder( 100 ); stringBuilder.append( "Baeldung" ); stringBuilder.append( " is" ); stringBuilder.append( " awesome" ); assertEquals( "Baeldung is awesome" , stringBuilder.toString());
在内部, StringBuilder 维护一个可变的字符数组。 在我们的代码示例中,我们通过 StringBuilder 构造函数声明它的 初始大小为100 。 由于这个大小声明, StringBuilder 可以是一种 连接 字符串 的非常有效的 方法 。
另外值得一提的是, StringBuffer是同步版本的StringBuilder
虽然同步通常与线程安全同义,但由于 StringBuffer的 构建器模式,不建议在多线程应用程序中使用同步 。虽然对同步方法的单独调用是线程安全的,但多个调用不是。
3.加法运算符
接下来是加法运算符(+)。这是导致添加数字的相同运算符, 并在应用于 字符串 时重载以连接 。
我们来看看它是如何工作的:
String myString = "The " + "quick " + "brown " + "fox..." ; assertEquals( "The quick brown fox..." , myString);
乍一看,这似乎比 StringBuilder 选项更简洁 。但是,当源代码编译时, +符号转换为 StringBuilder.append() 调用的链 。 因此, 混合使用 StringBuilder 和+ 连接 方法 被 认为是不好的做法 。
此外, 应避免使用循环内的+运算符进行 字符串 连接。由于 String 对象是不可变的,因此每次连接调用都将导致创建一个新的 String 对象。
4. String的方法
4.1 String.concat
不出所料, String.concat 方法是我们尝试连接 String 对象时的第一个调用方式 。 此方法返回一个 String 对象,因此将该方法链接在一起是一个有用的功能。
String myString = "Both" .concat( " fickle" ) .concat( " dwarves" ) .concat( " jinx" ) .concat( " my" ) .concat( " pig" ) .concat( " quiz" ); assertEquals( "Both fickle dwarves jinx my pig quiz" , myString);
在这个例子中,我们的链以 String 文字 开头, 然后 concat 方法允许我们链接调用以追加更多的 字符串 。
4.2 String.format
接下来是对 的String.format 方法,这使我们能够注入多种的Java 对象 到 字符串 的模板。
String.format 方法签名需要一个 单一的 字符串 表示我们的模板 。此 模板包含'%'字符,用于表示各种 对象 应放置 在其中的位置。
一旦我们的模板被声明,它就会 获取一个注入 模板 的 可变Object 数组 。
让我们看一下如何使用一个简单的例子:
String myString = String.format( "%s %s %.2f %s %s, %s..." , "I" , "ate" , 2.5056302 , "blueberry" , "pies" , "oops" ); assertEquals( "I ate 2.51 blueberry pies, oops..." , myString);
正如我们上面所看到的,该方法已将我们的 字符串 注入正确的格式。
4.3 String.join (Java 8+)
如果我们的 应用程序在Java 8 或更高版本 上运行 ,我们可以利用 String.join 方法。有了这个,我们可以 加入一个带有公共分隔符的 字符串 数组 ,确保不会错过任何空格。
String[] strings = { "I'm" , "running" , "out" , "of" , "pangrams!" }; String myString = String.join( " " , strings); assertEquals( "I'm running out of pangrams!" , myString);
这种方法的一个巨大优势是不必担心字符串之间的分隔符。
5 StringJoiner (Java 8+)
StringJoiner 将所有 String.join 功能抽象 为一个易于使用的类。该 构造函数有一个分隔符,使用可选的前缀和后缀 。我们可以使用名称很好的 add 方法追加 Strings 。
StringJoiner fruitJoiner = new StringJoiner( ", " ); fruitJoiner.add( "Apples" ); fruitJoiner.add( "Oranges" ); fruitJoiner.add( "Bananas" ); assertEquals( "Apples, Oranges, Bananas" , fruitJoiner.toString());
通过使用这个类而不是 String.join 方法, 我们可以在程序运行时追加 Strings ; 没有必要先创建阵列!
有关更多信息和示例,请访问我们关于 StringJoiner的文章。
6. Arrays.toString
关于数组的主题, Array 类还包含 一个方便的 toString 方法,它很好地格式化了一个对象数组。 该 阵列。 toString 方法还调用任何封闭对象的 toString 方法 - 所以我们需要确保我们有一个已定义的方法。
String[] myFavouriteLanguages = { "Java" , "JavaScript" , "Python" }; String toString = Arrays.toString(myFavouriteLanguages); assertEquals( "[Java, JavaScript, Python]" , toString);
不幸的是, 阵列。 toString 方法不可自定义,只 输出包含在方括号中的 字符串 。
7 Collectors.joining (Java 8+)
最后,让我们看一下 Collectors.joining 方法,它 允许我们将 Stream 的输出 汇集 到一个 String中。
List<String> awesomeAnimals = Arrays.asList( "Shark" , "Panda" , "Armadillo" ); String animalString = awesomeAnimals.stream().collect(Collectors.joining( ", " )); assertEquals( "Shark, Panda, Armadillo" , animalString);
使用流可以解锁与Java 8 Stream API相关的所有功能,例如过滤,映射,迭代等。
详情:https://www.lvbby.com/p/md/1902011035501582739001
- 上一篇: 大厂面试系列-字符串的拼接方式有几种?
- 下一篇: Go语言高性能字符串拼接(go 字符串操作)
猜你喜欢
- 2024-10-18 java面试题之三:字符串操作(字符串笔试题java)
- 2024-10-18 Jmeter BeanShell循环:字符串 拼接模式,为变量名 获取数据值
- 2024-10-18 连接字符串除了“+”还有哪些方法,进来看
- 2024-10-18 初识java—(三十四)String、StringBuffer和StringBuilder类
- 2024-10-18 初学者都在坑里!不要在Python中使用“+”来连接字符串
- 2024-10-18 一段简单的关于字符串的Java 代码,竟然考察了这么多东西
- 2024-10-18 Java中字符串连接运算符“+”的困惑
- 2024-10-18 Guava之字符串连接,分割,匹配处理
- 2024-10-18 【老梁聊IT之JAVA篇】StringBuilder的正确使用方法详解
- 2024-10-18 为何Java8中不再需要StringBuilder拼接字符串
你 发表评论:
欢迎- 07-15采用Oracle OSB总线进行服务注册和接入
- 07-15javaEE 新闻管理系统 oracle11+tomcat6
- 07-15从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 07-15如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 07-15【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 07-15【mykit-data】 数据库同步工具(数据库表同步工具)
- 07-15[Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- 07-15Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- 最近发表
-
- 采用Oracle OSB总线进行服务注册和接入
- javaEE 新闻管理系统 oracle11+tomcat6
- 从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 【mykit-data】 数据库同步工具(数据库表同步工具)
- [Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- Oracle数据库云服务系列新增前所未有的企业级功能
- 直播预告丨如何实现Oracle存储过程到java的一键转化
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)