Как объединить символы в Java? - PullRequest
28 голосов
/ 30 ноября 2008

Как вы объединяете символы в Java? Для конкатенации строк требуется только + между строками, но конкатенация символов с использованием + изменит значение символа в ascii и, следовательно, даст числовой вывод. Я хочу сделать System.out.println(char1+char2+char3... и создать строковое слово, подобное этому.

Я мог бы сделать

System.out.print(char1);
System.out.print(char2);
System.out.print(char3);

Но это даст мне только символы в 1 строке. Мне нужно это как строка. Любая помощь будет оценена.

Спасибо

Ответы [ 12 ]

50 голосов
/ 30 ноября 2008

Вы хотите сделать из них строку?

String s = new StringBuilder().append(char1).append(char2).append(char3).toString();

Обратите внимание, что

String b = "b";
String s = "a" + b + "c";

На самом деле компилируется в

String s = new StringBuilder("a").append(b).append("c").toString();

Редактировать : как указано выше, вы также можете сделать это:

"" + char1 + char2 + char3;

Это соответствует следующему:

new StringBuilder().append("").append(c).append(c1).append(c2).toString();

Редактировать (2) : исправлено сравнение добавления строк, поскольку, как указывает Клетус, ряд строк обрабатывается компилятором.

Цель вышеизложенного состоит в том, чтобы проиллюстрировать, что делает компилятор, а не сказать, что вам следует делать.

23 голосов
/ 30 ноября 2008

Я не собирался отвечать на этот вопрос, но здесь есть два ответа (за которые голосуют!), Которые просто неверны. Рассмотрим эти выражения:

String a = "a" + "b" + "c";
String b = System.getProperty("blah") + "b";

Первый оценивается в время компиляции . Второй оценивается в время выполнения .

То есть никогда заменять константные конкатенации (любого типа) на StringBuilder, StringBuffer или тому подобное. Используйте только те, в которых переменные задействованы, и обычно только тогда, когда вы добавляете много операндов или добавляете в цикл.

Если символы постоянные, это нормально:

String s = "" + 'a' + 'b' + 'c';

Если это не так, подумайте:

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();
}

как соответствующее решение.

Однако некоторые могут испытать желание оптимизировать:

String s = "Name: '" + name + "'"; // String name;

в это:

String s = new StringBuilder().append("Name: ").append(name).append("'").toString();

Хотя это и есть благие намерения, суть в следующем: НЕ .

Почему? Как правильно сказал другой ответ: компилятор сделает это за вас. Таким образом, делая это самостоятельно, вы не позволяете компилятору оптимизировать код или не зависите от того, является ли это хорошей идеей, код сложнее для чтения и излишне сложный.

Для низкоуровневой оптимизации компилятор лучше оптимизирует код, чем вы.

Пусть компилятор сделает свою работу. В этом случае наихудший сценарий - это то, что компилятор неявно меняет ваш код в точности на то, что вы написали. Объединение 2-3 строк может быть более эффективным, чем создание StringBuilder, поэтому лучше оставить все как есть. Компилятор знает, что лучше в этом отношении.

7 голосов
/ 30 ноября 2008

Если у вас есть несколько символов и вы хотите объединить их в строку, почему бы не сделать

System.out.println("" + char1 + char2 + char3); 

5 голосов
/ 30 ноября 2008

Вы можете использовать String конструктор .

System.out.println(new String(new char[]{a,b,c}));
4 голосов
/ 30 ноября 2008

Вы должны указать компилятору, что хотите выполнить конкатенацию строк, запустив последовательность со строкой, даже пустой. Вот так:

System.out.println("" + char1 + char2 + char3...);
2 голосов
/ 21 марта 2013

System.out.println(char1+""+char2+char3)

или

String s = char1+""+char2+char3;
1 голос
/ 03 сентября 2009

инициалы открытого класса {

public static void main (String [] args) {

    char initialA = 'M';
    char initialB = 'P';
    char initialC = 'T';

    System.out.println("" + initialA + initialB + initialC );


}   

}

1 голос
/ 30 ноября 2008

Вам необходим объект String некоторого описания для хранения вашего массива сцепленных символов, поскольку тип char будет содержать только один символ. например,

StringBuilder sb = new StringBuilder('a').append('b').append('c');
System.out.println(sb.toString);
0 голосов
/ 19 апреля 2018

это очень простой подход для объединения или добавления символа

       StringBuilder desc = new StringBuilder(); 
       String Description="this is my land"; 
       desc=desc.append(Description.charAt(i));
0 голосов
/ 17 апреля 2017

простой пример выбора символа из строки и добавления к строковой переменной

private static String findaccountnum (String holdername, String mobile) {

    char n1=holdername.charAt(0);
    char n2=holdername.charAt(1);
    char n3=holdername.charAt(2);
    char n4=mobile.charAt(0);
    char n5=mobile.charAt(1);
    char n6=mobile.charAt(2);
    String number=new StringBuilder().append(n1).append(n2).append(n3).append(n4).append(n5).append(n6).toString();

    return number;
}
...