Как объединить две строки в Java? - PullRequest
60 голосов
/ 20 сентября 2010

Я пытаюсь объединить строки в Java.Почему это не работает?

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

Ответы [ 20 ]

87 голосов
/ 20 сентября 2010

Вы можете объединять строки, используя оператор +:

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

theNumber неявно преобразуется в строку "42".

45 голосов
/ 20 сентября 2010

Оператор конкатенации в Java: +, а не .

Прочтите это (включая все подразделы) перед началом работы.Попытка перестать думать о пути php;)

Чтобы расширить свой взгляд на использование строк в Java - оператор + для строк фактически преобразован (компилятором) в нечто похожее на:

new StringBuilder().append("firstString").append("secondString").toString()
14 голосов
/ 20 сентября 2010

На этот вопрос есть два основных ответа:

  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;
7 голосов
/ 14 октября 2016

Из коробки у вас есть 3 способа вставить значение переменной в String, когда вы пытаетесь достичь:

1.Самый простой способ

Вы можете просто использовать оператор + между String и любым типом объекта или примитива, он автоматически объединит String и

  1. В случаеобъекта, значение String.valueOf(obj), соответствующее String "null", если obj равно null, в противном случае значение obj.toString().
  2. Inслучай примитивного типа, эквивалентный 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, будет гораздо эффективнее использовать этот подход для обеспечения лучшей начальной емкости.Например, в нашем примере мы создаем String, длина которого больше 16, поэтому для лучшей производительности его следует переписать следующим образом:

Пример оптимизирован:

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, потому что его гораздо легче читать, а его гораздо легче поддерживать.

6 голосов
/ 10 апреля 2017

Ява 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);
4 голосов
/ 20 сентября 2010

Вы должны быть программистом PHP.

Использовать знак +.

System.out.println("Your number is " + theNumber + "!");
3 голосов
/ 20 сентября 2010

Это должно работать

public class StackOverflowTest
{  
    public static void main(String args[])
    {
        int theNumber = 42;
        System.out.println("Your number is " + theNumber + "!");
    }
}
3 голосов
/ 20 сентября 2010

Используйте + для объединения строк.

"Your number is " + theNumber + "!"
3 голосов
/ 28 марта 2013

Для точной операции объединения двух строк используйте:

file_names = file_names.concat(file_names1);

В вашем случае используйте + вместо .

3 голосов
/ 07 марта 2014

Для повышения производительности используйте str1.concat(str2), где str1 и str2 - строковые переменные.

...