您的位置 首页 java

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相关的所有功能,例如过滤,映射,迭代等。

详情:

文章来源:智云一二三科技

文章标题:Java连接字符串的各种方法全汇总

文章地址:https://www.zhihuclub.com/185878.shtml

关于作者: 智云科技

热门文章

网站地图