Tukarkan String Dipisahkan Koma ke Senarai di Java

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan melihat menukar String yang dipisahkan koma menjadi List of string. Selain itu, kami akan mengubah String bilangan bulat yang dipisahkan koma menjadi List of Integers .

2. Kebergantungan

Beberapa kaedah yang akan kami gunakan untuk penukaran kami memerlukan perpustakaan Apache Commons Lang 3 dan Guava. Oleh itu, mari tambahnya ke fail pom.xml kami :

 org.apache.commons commons-lang3 3.8.1   com.google.guava guava 27.0.1-jre 

3. Menentukan Contoh Kita

Sebelum kita mulakan, mari kita tentukan dua rentetan input yang akan kita gunakan dalam contoh kita. Rentetan pertama, negara, mengandungi beberapa rentetan yang dipisahkan dengan koma, dan rentetan kedua, peringkat, merangkumi angka yang dipisahkan oleh koma:

String countries = "Russia,Germany,England,France,Italy"; String ranks = "1,2,3,4,5,6,7";

Dan, sepanjang tutorial ini, kami akan menukar rentetan di atas menjadi senarai rentetan dan bilangan bulat yang akan kami simpan di:

List convertedCountriesList; List convertedRankList;

Akhirnya, setelah kami melakukan penukaran, hasil yang diharapkan adalah:

List expectedCountriesList = Arrays.asList("Russia", "Germany", "England", "France", "Italy"); List expectedRanksList = Arrays.asList(1, 2, 3, 4, 5, 6, 7);

4. Java Teras

Dalam penyelesaian pertama kami, kami akan menukar rentetan ke senarai rentetan dan bilangan bulat menggunakan inti Java.

Pertama, kami akan memisahkan rentetan kami ke pelbagai rentetan menggunakan perpecahan, yang String kaedah utiliti kelas. Kemudian, kami akan menggunakan Arrays.asList pada rentetan rentetan baru kami untuk menukarnya menjadi senarai rentetan:

List convertedCountriesList = Arrays.asList(countries.split(",", -1));

Mari sekarang ubah rentetan nombor kita ke senarai bilangan bulat.

Kami akan menggunakan kaedah perpecahan untuk menukar rentetan nombor kami menjadi pelbagai rentetan. Kemudian, kami akan menukar setiap rentetan dalam array baru kami ke bilangan bulat dan menambahkannya ke senarai kami :

String[] convertedRankArray = ranks.split(","); List convertedRankList = new ArrayList(); for (String number : convertedRankArray) { convertedRankList.add(Integer.parseInt(number.trim())); }

Dalam kedua kes ini, kami menggunakan kaedah utiliti pemisah dari kelas String untuk memisahkan rentetan yang dipisahkan koma menjadi array rentetan.

Perhatikan bahawa kaedah pemisahan yang terlalu banyak digunakan untuk menukar rentetan negara kita mengandungi had parameter kedua , yang mana kami memberikan nilai sebagai -1. Ini menentukan bahawa corak pemisah harus diterapkan sebanyak mungkin.

Yang berpecah kaedah yang kami digunakan untuk memisahkan rentetan kami integer ( pangkat ) kegunaan sifar sebagai had , dan sebagainya ia mengabaikan rentetan kosong, manakala perpecahan digunakan di negara-negara rentetan mengekalkan rentetan kosong dalam tatasusunan yang dikembalikan.

5. Aliran Java

Sekarang, kami akan melaksanakan penukaran yang sama menggunakan Java Stream API.

Pertama, kita akan menukar rentetan negara kita menjadi rentetan rentetan menggunakan kaedah split di kelas String . Kemudian, kami akan menggunakan kelas Stream untuk menukar array kami menjadi senarai rentetan:

List convertedCountriesList = Stream.of(countries.split(",", -1)) .collect(Collectors.toList());

Mari lihat bagaimana menukar rentetan nombor kami ke dalam senarai bilangan bulat menggunakan Aliran.

Sekali lagi, kita akan menukar rentetan nombor menjadi array rentetan menggunakan kaedah split dan menukar array yang dihasilkan menjadi Stream of String menggunakan kaedah () di kelas Stream .

Kemudian, kita akan memotong ruang depan dan belakang dari setiap String di Aliran menggunakan peta (String :: trim) .

Seterusnya, kami akan menggunakan peta (Integer :: parseInt) pada aliran kami untuk menukar setiap rentetan dalam Aliran kami menjadi Integer .

Dan akhirnya, kami akan memanggil collect (Collectors.toList ()) di Stream untuk menukarnya ke senarai integer:

List convertedRankList = Stream.of(ranks.split(",")) .map(String::trim) .map(Integer::parseInt) .collect(Collectors.toList());

6. Apache Commons Lang

Dalam penyelesaian ini, kami akan menggunakan perpustakaan Apache Commons Lang3 untuk melakukan penukaran kami. Apache Commons Lang3 menyediakan beberapa fungsi pembantu untuk memanipulasi kelas inti Java.

Pertama, kami akan membahagikan rentetan kami ke dalam rentetan rentetan menggunakan StringUtils.splitPreserveAllTokens . Kemudian, kami akan menukar rentetan rentetan baru kami ke dalam senarai menggunakan kaedah Arrays.asList :

List convertedCountriesList = Arrays.asList(StringUtils.splitPreserveAllTokens(countries, ","));

Mari sekarang ubah rentetan nombor kita ke senarai bilangan bulat.

Kami sekali lagi akan menggunakan kaedah StringUtils.split untuk membuat susunan rentetan dari rentetan kami. Kemudian, kami akan menukar setiap rentetan dalam array baru kami menjadi integer menggunakan Integer.parseInt dan menambahkan bilangan bulat yang ditukar ke senarai kami:

String[] convertedRankArray = StringUtils.split(ranks, ","); List convertedRankList = new ArrayList(); for (String number : convertedRankArray) { convertedRankList.add(Integer.parseInt(number.trim())); } 

Dalam contoh ini, kami menggunakan splitPreserveAllTokens kaedah untuk dibahagi kami negara tali, sedangkan kita menggunakan split kaedah untuk dibahagi kami barisan tali.

Walaupun kedua fungsi ini memisahkan rentetan menjadi larik , splitPreserveAllTokens memelihara semua token termasuk rentetan kosong yang dibuat oleh pemisah bersebelahan, sementara kaedah pemecahan mengabaikan rentetan kosong .

Oleh itu, jika kita mempunyai rentetan kosong yang ingin kita masukkan dalam senarai kita, maka kita harus menggunakan splitPreserveAllTokens dan bukannya perpecahan .

7. Jambu batu

Akhirnya, kami akan menggunakan perpustakaan Jambu untuk menukar rentetan kami ke senarai yang sesuai.

Untuk menukar rentetan negara kita, pertama-tama kita memanggil Splitter.on dengan koma sebagai parameter untuk menentukan watak rentetan kita yang harus dibahagi.

Then, we'll use the trimResults method on our Splitter instance. This will ignore all leading and trailing white spaces from the created substrings.

Finally, we'll use the splitToList method to split our input string and convert it to a list:

List convertedCountriesList = Splitter.on(",") .trimResults() .splitToList(countries);

Now, let's convert the string of numbers to a list of integers.

We'll again convert the string of numbers into a list of stringsusing the same process we followed above.

Then, we'll use the Lists.transform method, which accepts our list of strings as the first parameter an implementation of the Function interface as the second parameter.

The Fungsi pelaksanaan antara muka menukarkan setiap rentetan dalam senarai kami untuk integer:

List convertedRankList = Lists.transform(Splitter.on(",") .trimResults() .splitToList(ranks), new Function() { @Override public Integer apply(String input) { return Integer.parseInt(input.trim()); } }); 

8. Kesimpulannya

Dalam artikel ini, kami menukarkan dipisahkan koma Strings ke dalam senarai tali dan senarai integer. Walau bagaimanapun, kita dapat mengikuti proses yang serupa untuk mengubah String menjadi senarai jenis data primitif.

Seperti biasa, kod dari artikel ini terdapat di Github.