在Java中如何连接两个字符串?

75

我正在尝试在Java中连接字符串。为什么这不起作用?

public class StackOverflowTest {  
    public static void main(String args[]) {
        int theNumber = 42;
        System.out.println("Your number is " . theNumber . "!");
    }
}
23个回答

99
你可以使用+运算符连接字符串:
System.out.println("Your number is " + theNumber + "!");

theNumber被隐式转换为字符串"42"


5
或者您可以使用 String.format。有关 string.formater 的详细信息,请参阅 Formatter 文档。 - Ota

53
在Java中,字符串的连接操作符是+而不是.。在开始之前请阅读本文(包括所有子部分)。尝试停止使用php的思维方式;) 为了扩展您对Java中字符串的使用视野- 实际上,字符串的+运算符会被编译器转换为类似以下代码:
new StringBuilder().append("firstString").append("secondString").toString()

5
@Erick Robertson 你错了。请重新阅读 java.lang.String 的 javadoc。在循环内使用 + 是低效的。否则,编译器会使用 StringBuilder - Bozho
2
@ErickпјљдЅ жЉЉ+е’Њ+=жђћж··дє†гЂ‚ - BalusC
哇,这对我来说是新的。以前并不总是这样的。现在我会停止显式地使用StringBuilder,而是使用一系列的+去做同样的事情。不过,在连接跨越多行的字符串时,我仍然会使用它,例如当字符串被有条件地追加等情况。谢谢! - Erick Robertson

20

回答这个问题有两个基本方法:

  1. [简单] 使用 + 操作符(字符串连接)。"your number is" + theNumber + "!" (正如其他地方所注意到的)
  2. [稍微复杂]: 使用 StringBuilder(或 StringBuffer)。
StringBuilder value;
value.append("your number is");
value.append(theNumber);
value.append("!");

value.toString();
我建议不要像这样叠加操作:
new StringBuilder().append("I").append("like to write").append("confusing code");

编辑:从Java 5开始,字符串连接运算符被编译器转换为StringBuilder调用。因此,上面两种方法是相等的。

注意:空间是宝贵的商品,正如这个句子所示。

警告:下面的示例1会生成多个StringBuilder实例,比示例2效率低。

示例1

String Blam = one + two;
Blam += three + four;
Blam += five + six;

示例2

String Blam = one + two + three + four + five + six;

JavaC将“+”转换为使用StringBuilders,请查看http://stackoverflow.com/questions/1532461/stringbuilder-vs-string-concatenation-in-tostring-in-java。 - Sled
我认为通常不建议猜测编译器如何翻译代码,因为编译器编写者(和优化器)可能会更改过程以实现最大性能,只要它与语言的语义一致。 - GregD
猜测编译器如何转换代码是不明智的。但是,众所周知,从Java 5开始,Java编译器将字符串连接转换为StringBuilder调用,因此使我上面的断言与猜测相反。 - DwB

8

开箱即用,您有3种方法将变量的值注入到String中,以达到您想要的效果:

1. 最简单的方法

您可以在String和任何对象或基本类型之间使用运算符+,它会自动连接String

  1. 对于对象,String.valueOf(obj)的值相应地是String"null"如果objnull,否则是obj.toString() 的值。
  2. 对于原始类型,等同于String.valueOf(<primitive-type>)

null对象的示例:

Integer theNumber = 42;
System.out.println("Your number is " + theNumber + "!");

输出:

Your number is 42!

使用 null 对象的示例:

Integer theNumber = null;
System.out.println("Your number is " + theNumber + "!");

输出:

Your number is null!

一个基本类型的示例:

int theNumber = 42;
System.out.println("Your number is " + theNumber + "!");

输出:

Your number is 42!

2. 显式方式和可能是最有效的方式

您可以使用StringBuilder(或StringBuffer,它是线程安全但已过时的替代品)来构建您的String,使用append方法。

例如:

int theNumber = 42;
StringBuilder buffer = new StringBuilder()
    .append("Your number is ").append(theNumber).append('!');
System.out.println(buffer.toString()); // or simply System.out.println(buffer)

输出:

Your number is 42!

在幕后,这实际上是最近的Java编译器如何将所有使用运算符+连接的String转换的方式,唯一的区别是您可以完全控制

实际上,编译器将使用默认构造函数,因此默认容量(16), 因为它们不知道要构建的最终String的长度,这意味着如果最终长度大于16,则必须扩展容量,这在性能方面有价格。

因此,如果您事先知道最终String的大小将大于16,那么使用此方法提供更好的初始容量将更加高效。例如,在我们的示例中,我们创建了一个长度大于16的String,因此为了获得更好的性能,它应该重写为下一个:

优化后的示例:

int theNumber = 42;
StringBuilder buffer = new StringBuilder(18)
    .append("Your number is ").append(theNumber).append('!');
System.out.println(buffer)

输出:

Your number is 42!

3. 最易读的方式

您可以使用方法String.format(locale, format, args)String.format(format, args),它们都依赖于一个Formatter来构建您的String。这允许您使用占位符指定最终String的格式,该占位符将被参数的值替换。

示例:

int theNumber = 42;
System.out.println(String.format("Your number is %d!", theNumber));
// Or if we need to print only we can use printf
System.out.printf("Your number is still %d with printf!%n", theNumber);

输出:

Your number is 42!
Your number is still 42 with printf!

这种方法最有趣的方面在于我们清楚地知道最终的String,因为它更易于阅读和维护。

7

Java 8的方式:

StringJoiner sj1 = new StringJoiner(", ");
String joined = sj1.add("one").add("two").toString();
// one, two
System.out.println(joined);


StringJoiner sj2 = new StringJoiner(", ","{", "}");
String joined2 = sj2.add("Jake").add("John").add("Carl").toString();
// {Jake, John, Carl}
System.out.println(joined2);

5

你必须是一名PHP程序员。

使用加号+

System.out.println("Your number is " + theNumber + "!");

4

应该可以运行

public class StackOverflowTest
{  
    public static void main(String args[])
    {
        int theNumber = 42;
        System.out.println("Your number is " + theNumber + "!");
    }
}

4
为了获得更好的性能,请使用 str1.concat(str2),其中 str1str2 是字符串变量。

4
"

"+" 替代 "."

"

4

使用+进行字符串拼接。

"Your number is " + theNumber + "!"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接