如何在java中连接字符?

30 java concatenation character

你如何连接java中的字符?连接字符串只需要+在字符串之间,但是使用连接字符+会将char的值更改为ascii,从而提供数字输出.我想做System.out.println(char1+char2+char3...并创建一个这样的String字.

我可以

System.out.print(char1);
System.out.print(char2);
System.out.print(char3);
Run Code Online (Sandbox Code Playgroud)

但是,这只会让我获得1行中的字符.我需要它作为一个字符串.任何帮助,将不胜感激.

谢谢

Dus*_*tin 51

你想用它们制作一个字符串吗?

String s = new StringBuilder().append(char1).append(char2).append(char3).toString();
Run Code Online (Sandbox Code Playgroud)

注意

String b = "b";
String s = "a" + b + "c";
Run Code Online (Sandbox Code Playgroud)

实际上编译成

String s = new StringBuilder("a").append(b).append("c").toString();
Run Code Online (Sandbox Code Playgroud)

编辑:正如litb所指出的,你也可以这样做:

"" + char1 + char2 + char3;
Run Code Online (Sandbox Code Playgroud)

这符合以下内容:

new StringBuilder().append("").append(c).append(c1).append(c2).toString();
Run Code Online (Sandbox Code Playgroud)

编辑(2):更正了字符串追加比较,因为正如cletus指出的那样,编译器会处理一系列字符串.

上面的目的是说明编译器的作用,而不是告诉你应该做什么.


cle*_*tus 23

我不打算回答这个问题,但这里有两个答案(正在投票!),这是完全错误的.考虑这些表达式:

String a = "a" + "b" + "c";
String b = System.getProperty("blah") + "b";
Run Code Online (Sandbox Code Playgroud)

第一个是在编译时评估的.第二个是在运行时评估的.

所以永远不要用StringBuilder,StringBuffer等替换常量连接(任何类型).只使用变量被调用的那些,通常只有当你附加了很多操作数或者你在循环中追加时.

如果字符是常量,这很好:

String s = "" + 'a' + 'b' + 'c';
Run Code Online (Sandbox Code Playgroud)

如果他们不是,请考虑这个:

String concat(char... chars) {
  if (chars.length == 0) {
    return "";
  }
  StringBuilder s = new StringBuilder(chars.length);
  for (char c : chars) {
    s.append(c);
  }
  return s.toString();
}
Run Code Online (Sandbox Code Playgroud)

作为适当的解决方案.

但有些人可能会想要优化:

String s = "Name: '" + name + "'"; // String name;
Run Code Online (Sandbox Code Playgroud)

进入这个:

String s = new StringBuilder().append("Name: ").append(name).append("'").toString();
Run Code Online (Sandbox Code Playgroud)

虽然这是出于善意,但最重要的是不要.

为什么?正如另一个答案正确指出的那样:编译器会为您执行此操作.所以在自己做的时候,你不允许编译器优化代码,或者不依赖于代码是否是一个好主意,代码更难阅读而且不必要地复杂化.

对于低级优化,编译器在优化代码方面比您更好.

让编译器完成它的工作.在这种情况下,最糟糕的情况是编译器隐式地将您的代码更改为您编写的代码.连接2-3个字符串可能比构造StringBuilder更有效,因此最好保持原样.编译器在这方面知道什么是最好的.


Joh*_*itb 8

如果你有一堆字符,并希望将它们连成一个字符串,为什么不这样做

System.out.println("" + char1 + char2 + char3); 
Run Code Online (Sandbox Code Playgroud)


Den*_*s C 6

您可以使用String构造函数.

System.out.println(new String(new char[]{a,b,c}));
Run Code Online (Sandbox Code Playgroud)


sbl*_*ndy 5

您需要告诉编译器您想要通过以字符串(甚至是空字符串)开始序列来进行字符串连接。就像这样:

System.out.println("" + char1 + char2 + char3...);
Run Code Online (Sandbox Code Playgroud)