Java: Конкатенация
Программы постоянно оперируют строками. Все, что мы видим на сайтах или в мобильных приложениях, так или иначе представлено в виде текста. Этот текст чаще всего динамический — собранный из разных частей, которые соединяют вместе. Например, мы объединяем имя и фамилию, добавляем единицу измерения или составляем сообщение из шаблона. Операция соединения строк в программировании называется конкатенацией и выглядит так:
// Оператор такой же, как и при сложении чисел,
// но здесь он имеет другой смысл (семантику)
System.out.println("Dragon" + "stone");
// => DragonstoneСклеивание строк всегда происходит в том же порядке, в котором записаны операнды. Левый операнд становится левой частью результата, а правый — правой. Конкатенировать можно сколько угодно частей подряд. Вот еще несколько примеров:
System.out.println("Kings" + "wood"); // => Kingswood
// Обратный порядок слов
System.out.println("road" + "Kings"); // => roadKings
// Конкатенировать можно абсолютно любые строки
System.out.println("King's" + "Landing"); // => King'sLandingВ последнем примере название города получилось с ошибкой: King's Landing нужно писать через пробел. Но в наших исходных строках пробелов не было, а пробелы в самом коде вокруг символа + ни на что не влияют, потому что они не входят в строки.
Пробел тоже считается символом
При объединении Java не вставляет пробелы автоматически. Если между частями нужен пробел, его добавляют вручную. Из ситуации с King's Landing есть три выхода:
// Ставим пробел в левой части
System.out.println("King's " + "Landing"); // => King's Landing
// Ставим пробел в правой части
System.out.println("King's" + " Landing"); // => King's Landing
// Добавляем пробел отдельно
System.out.println("King's" + " " + "Landing"); // => King's LandingРезультат во всех трех случаях одинаковый. Пробел — такой же символ, как и остальные, и чем больше пробелов в строках, тем шире отступ между словами.
Конкатенация с числом
Оператор + умеет склеивать строку не только со строкой, но и с числом. В этом случае число превращается в текст и приклеивается к строке:
System.out.println("Сумма: " + 5);
// => Сумма: 5Слева строка, справа число 5. Java выводит их вместе, как единый текст.
Управляющие последовательности
В строках встречаются управляющие последовательности, например \n для перевода строки. При конкатенации они работают так же, как и любые другие символы:
System.out.println("Hello," + "\n" + "World!");
// =>
// Hello,
// World!Заключение
Конкатенация — это объединение строк через +. Склеивание идет строго слева направо, в порядке операндов. Пробелы не добавляются автоматически, поэтому их включают в строки вручную.
Задание
Используя System.out.println(), выполните конкатенацию слов и выведите на экран фразу:
Winter came for the House of Frey.Каждое слово должно быть записано отдельно и взято в кавычки, например "Winter ". Не забудьте о пробелах после каждого слова.
Полезное
Если в редакторе есть запись
// BEGINи// END, то код нужно писать между этими строчками.
Java: Конкатенация
Программы постоянно оперируют строками. Все, что мы видим на сайтах или в мобильных приложениях, так или иначе представлено в виде текста. Этот текст чаще всего динамический — собранный из разных частей, которые соединяют вместе. Например, мы объединяем имя и фамилию, добавляем единицу измерения или составляем сообщение из шаблона. Операция соединения строк в программировании называется конкатенацией и выглядит так:
// Оператор такой же, как и при сложении чисел,
// но здесь он имеет другой смысл (семантику)
System.out.println("Dragon" + "stone");
// => DragonstoneСклеивание строк всегда происходит в том же порядке, в котором записаны операнды. Левый операнд становится левой частью результата, а правый — правой. Конкатенировать можно сколько угодно частей подряд. Вот еще несколько примеров:
System.out.println("Kings" + "wood"); // => Kingswood
// Обратный порядок слов
System.out.println("road" + "Kings"); // => roadKings
// Конкатенировать можно абсолютно любые строки
System.out.println("King's" + "Landing"); // => King'sLandingВ последнем примере название города получилось с ошибкой: King's Landing нужно писать через пробел. Но в наших исходных строках пробелов не было, а пробелы в самом коде вокруг символа + ни на что не влияют, потому что они не входят в строки.
Пробел тоже считается символом
При объединении Java не вставляет пробелы автоматически. Если между частями нужен пробел, его добавляют вручную. Из ситуации с King's Landing есть три выхода:
// Ставим пробел в левой части
System.out.println("King's " + "Landing"); // => King's Landing
// Ставим пробел в правой части
System.out.println("King's" + " Landing"); // => King's Landing
// Добавляем пробел отдельно
System.out.println("King's" + " " + "Landing"); // => King's LandingРезультат во всех трех случаях одинаковый. Пробел — такой же символ, как и остальные, и чем больше пробелов в строках, тем шире отступ между словами.
Конкатенация с числом
Оператор + умеет склеивать строку не только со строкой, но и с числом. В этом случае число превращается в текст и приклеивается к строке:
System.out.println("Сумма: " + 5);
// => Сумма: 5Слева строка, справа число 5. Java выводит их вместе, как единый текст.
Управляющие последовательности
В строках встречаются управляющие последовательности, например \n для перевода строки. При конкатенации они работают так же, как и любые другие символы:
System.out.println("Hello," + "\n" + "World!");
// =>
// Hello,
// World!Заключение
Конкатенация — это объединение строк через +. Склеивание идет строго слева направо, в порядке операндов. Пробелы не добавляются автоматически, поэтому их включают в строки вручную.
Задание
Используя System.out.println(), выполните конкатенацию слов и выведите на экран фразу:
Winter came for the House of Frey.Каждое слово должно быть записано отдельно и взято в кавычки, например "Winter ". Не забудьте о пробелах после каждого слова.
Полезное
Если в редакторе есть запись
// BEGINи// END, то код нужно писать между этими строчками.
Ваше упражнение проверяется по этим тестам
import static org.assertj.core.api.Assertions.assertThat;
import java.io.ByteArrayOutputStream;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.PrintStream;
class AppTest {
public static void main(String[] args) {
final var expected = "Winter " + "came " + "for " + "the " + "House " + "of " + "Frey.";
ByteArrayOutputStream out = new ByteArrayOutputStream();
System.setOut(new PrintStream(out));
App.main(null);
final var actual = out.toString().trim();
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
System.out.println(actual);
assertThat(actual).isEqualTo(expected);
}
}Решение учителя откроется через:
20:00
