Объединение нескольких литералов String или объекта в один является общим требованием программирования, и вы часто будете встречать ситуации, когда вам нужно преобразовать список String или Collection String в CSV String для вашего приложения. В течение долгого времени API JDK не имеет возможности объединять несколько литералов или объектов String вместе, что вынуждает программистов писать хаки, такие как цикл по всем объектам String, и присоединять их вручную, используя конкатенацию String для создания окончательного объединенного String. Несмотря на то, что этот подход работал, он был заполнен ошибками и взломами, как вы должны быть осторожны, чтобы не добавлять разделитель перед первым элементом и после последнего элемента, что часто вызывало проблемы, особенно в случае начинающих и младших разработчиков Java.
Но большая проблема с этим подходом состояла в том, что каждый должен заново изобрести колесо. Поскольку это было очень распространенное требование, многие программисты пишут одни и те же процедуры и делают одни и те же ошибки и часто заканчивают в StackOverflow, чтобы решить свои проблемы. К счастью, Java 8 решила эту проблему раз и навсегда.
API JDK 8 предоставляет еще несколько способов объединения строк, например, вы можете присоединиться к строке, используя класс StringJoiner, или вы можете присоединиться к строке, вызвав метод String.join ().
В этой статье мы рассмотрим оба этих способа объединения строк и поймем, в чем разница между ними, плюсами и минусами каждого подхода, а также когда использовать StringJoiner и когда String.join () является лучшим вариантом.
Присоединение String с использованием StringJoiner в Java 8
В API JDK 8 добавлен новый класс с именем java.util.StringJoiner, который позволяет объединять несколько строк, используя указанный разделитель или объединитель. Например, вы можете объединить несколько строк, разделенных запятой
(,) для создания строки CSV, или, что еще лучше, вы можете создать полный путь к каталогу в Linux, присоединившись к строке, используя косую черту «/», как объяснил Cay. С. Хорстманн в Java SE 9 для нетерпеливых , моя любимая книга для изучения Java.
Вот пример:
1
2
3
4
|
StringJoiner joiner = new StringJoiner( "/" ); joiner.add( "usr" ); joiner.add( "local" ); joiner.add( "bin" ); |
Это даст вам строку типа «usr / local / bin», которую вы можете передать в любую программу. Вы можете дополнительно добавить префикс «/», если хотите использовать его как абсолютный путь, или использовать его, как этот, если вам нужен относительный путь.
Еще одним преимуществом StringJoiner является свободный API, который он предлагает, что означает, что вы можете писать код в одну строку. Например, приведенный выше код можно переписать следующим образом, используя беглые методы StringJoiner:
1
|
String result= new StringJoiner( "/" ).add( "usr" ).add( "local" ).add( "bin" ); |
Это напечатает:
1
|
"usr/local/bin" |
Соединение строки с помощью метода join () в Java 8
Проблема с StringJoiner заключается в том, что вам нужно знать, что есть класс StringJoiner, который не так уж и плох, но что, если вы можете напрямую присоединиться к String из самого популярного класса java.lang.String? Что ж, это то, что думали дизайнеры Java, и они добавили статический метод join () для соединения String прямо из самого класса String.
Вот пример использования метода String.join () для объединения нескольких литералов String в Java:
1
2
|
String colonSeparatedValue = String.join( ":" , "abc" , "bcd" , "def" ); System.out.println( "colon separated String : " + colonSeparatedValue); |
Это напечатает следующую строку:
1
|
colon separated String : abc:bcd:def |
Что очень хорошо, потому что теперь вам не нужно беспокоиться о
отсутствие добавления разделителя в начале или его удаление в конце — одна из распространенных проблем, с которыми вы сталкиваетесь при ручном объединении нескольких строк в цикл, разделенный разделителем, как показано ранее в моем примере создания строки CSV в Java.
Другое преимущество метода String.join () состоит в том, что теперь вы можете напрямую преобразовывать список String в строку CSV в Java без написания какого-либо ручного кода, вот пример того, как это сделать.
1
2
3
|
List mylist = Arrays.asList( "London" , "Paris" , "NewYork" ); String joined = String.join( "||" , mylist); System.out.println( "Joined String : " + joined); |
Это напечатает следующую строку:
1
|
Joined String : London||Paris||NewYork |
Это круто, не правда ли? Теперь вы можете свободно преобразовывать список строк или набор строк в строку CSV вручную в Java. Стоит также отметить, что String.join () внутренне использует класс StringJoiner для объединения строковых литералов.
2 способа присоединиться к строке в Java 8
Вот 2 способа присоединиться к String в Java 8, первый пример использует
Класс StringJoiner, а во втором примере используется метод String.join (), метод статической утилиты, добавленный в java.lang.String в JDK 8.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
package test; import java.util.Arrays; import java.util.List; import java.util.StringJoiner; /** * Java program to show how to join String in Java 8. * There are two ways to do that in Java 8, by using StringJoiner or * by using join() method of String class. * @author Javin */ public class Test { public static void main(String args[]) { // StringJoiner can join multiple String using any delimiter // Let's create a CSV String by joining Stirng using comma StringJoiner joiner = new StringJoiner( "," ); joiner.add( "one" ); joiner.add( "two" ); joiner.add( "three" ); System.out.println( "Comma separated String : " + joiner.toString()); // You can combine all three lines into one because // StringJoiner provides a fluent interface StringJoiner delimitedString = new StringJoiner( "|" ).add( "id" ).add( "name" ); System.out.println( "Pipe delimited String : " + delimitedString); // 2nd Example: You can also join String by String.join() method // By far, this is the most convenient method to join Strings // in Java. String csv = String.join( ":" , "abc" , "bcd" , "def" ); System.out.println( "colon separated String : " + csv); // You can even use String.join() method to join contents of // ArrayList, Array, LinkedList or any collection, actually // any container which implements Iterable interface List mylist = Arrays.asList( "London" , "Paris" , "NewYork" ); String joined = String.join( "||" , mylist); System.out.println( "Joined String : " + joined); } } Output Comma separated String : one,two,three Pipe delimited String : id|name colon separated String : abc:bcd:def Joined String : London||Paris||NewYork |
Это все о двух способах присоединения к String в Java 8 . Теперь вы, наконец, можете присоединиться к String в Java 8, не используя стороннюю библиотеку, и у вас также есть возможность использовать класс, который имеет смысл для вас. В общем случае метод join () класса String более удобен, поскольку вы можете напрямую вызывать и передавать как разделители, так и отдельные объекты String, которые необходимо объединить.
Я имею в виду, вам не нужно создавать другой объект, такой как StringJoiner. Это также позволяет вам присоединиться к String из класса Collection, такого как ArrayList или LinkedList, что означает, что вы можете создать разделенную запятыми строку из ArrayList из String, насколько это круто?
Спасибо за чтение этой статьи до сих пор. Если вам понравилась эта статья, пожалуйста, поделитесь с друзьями и коллегами. Если у вас есть какие-либо вопросы или предложения, пожалуйста, оставьте комментарий.
Смотрите оригинальную статью здесь: StringJoiner против String.join в Java 8 с примерами Мнения, высказанные участниками Java Code Geeks, являются их собственными. |