我正在尝试在Java中连接字符串。为什么这不起作用?
public class StackOverflowTest {
public static void main(String args[]) {
int theNumber = 42;
System.out.println("Your number is " . theNumber . "!");
}
}
我正在尝试在Java中连接字符串。为什么这不起作用?
public class StackOverflowTest {
public static void main(String args[]) {
int theNumber = 42;
System.out.println("Your number is " . theNumber . "!");
}
}
+
运算符连接字符串:System.out.println("Your number is " + theNumber + "!");
theNumber
被隐式转换为字符串"42"
。
+
而不是.
。在开始之前请阅读本文(包括所有子部分)。尝试停止使用php的思维方式;) 为了扩展您对Java中字符串的使用视野- 实际上,字符串的+
运算符会被编译器转换为类似以下代码:new StringBuilder().append("firstString").append("secondString").toString()
java.lang.String
的 javadoc。在循环内使用 +
是低效的。否则,编译器会使用 StringBuilder
。 - Bozho+
е’Њ+=
жђћж··дє†гЂ‚ - BalusCStringBuilder
,而是使用一系列的+
去做同样的事情。不过,在连接跨越多行的字符串时,我仍然会使用它,例如当字符串被有条件地追加等情况。谢谢! - Erick Robertson回答这个问题有两个基本方法:
+
操作符(字符串连接)。"your number is" + theNumber + "!"
(正如其他地方所注意到的)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;
开箱即用,您有3种方法将变量的值注入到String
中,以达到您想要的效果:
您可以在String
和任何对象或基本类型之间使用运算符+
,它会自动连接String
和
String.valueOf(obj)
的值相应地是String
"null
"如果obj
为null
,否则是obj.toString()
的值。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!
您可以使用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!
您可以使用方法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
,因为它更易于阅读和维护。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);
你必须是一名PHP程序员。
使用加号+
。
System.out.println("Your number is " + theNumber + "!");
应该可以运行
public class StackOverflowTest
{
public static void main(String args[])
{
int theNumber = 42;
System.out.println("Your number is " + theNumber + "!");
}
}
str1.concat(str2)
,其中 str1
和 str2
是字符串变量。"+" 替代 "."
"使用+
进行字符串拼接。
"Your number is " + theNumber + "!"