Вопрос-ответ

How do I concatenate two strings in Java?

Как мне объединить две строки в Java?

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

public class StackOverflowTest {  
public static void main(String args[]) {
int theNumber = 42;
System.out.println("Your number is " . theNumber . "!");
}
}
Переведено автоматически
Ответ 1

Вы можете объединить строки с помощью + оператора:

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

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

Ответ 2

Оператор объединения в Java - это +, а не .

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

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

new StringBuilder().append("firstString").append("secondString").toString()
Ответ 3

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


  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 вызовы. Из-за этого оба описанных выше метода равны.

Примечание: Spaceisavaluablecommodity, как демонстрирует предложение.

Предостережение: приведенный ниже пример 1 генерирует несколько StringBuilder экземпляров и менее эффективен, чем приведенный ниже пример 2

Пример 1

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

Пример 2

String Blam = one + two + three + four + five + six;
Ответ 4

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

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

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


  1. В случае объекта значение String.valueOf(obj), соответствующее String "null" if, obj является null в противном случае значением obj.toString().

  2. В случае примитивного типа, эквивалент String.valueOf(<primitive-type>).

Пример с не null объектом:

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

Вывод:

Your number is 42!

Example with a null object:

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

Output:

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, емкость обязательно будет увеличена, что имеет цену с точки зрения производительности.

Итак, если вы заранее знаете, что размер вашего final String будет больше, чем 16, будет намного эффективнее использовать этот подход для обеспечения лучшей начальной емкости. Например, в нашем примере мы создаем String, длина которого больше 16, поэтому для лучшей производительности его следует переписать как next:

Оптимизированный пример :

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. Это позволяет вам указать формат вашего final 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 потому что его гораздо легче читать, поэтому его намного проще поддерживать.

2024-02-03 19:35 java