Panduan Cepat untuk Java StringTokenizer

1. Ikhtisar

Dalam artikel singkat ini, kita akan menjelajahi kelas fundamental di Java - StringTokenizer .

2. StringTokenizer

Kelas StringTokenizer membantu kami membagi String menjadi beberapa token.

StreamTokenizer menyediakan fungsionalitas serupa tetapi metode tokenisasi jauh lebih sederhana daripada yang digunakan oleh kelas StreamTokenizer . Metode StringTokenizer tidak membedakan antara pengenal, angka, dan string yang dikutip, juga tidak mengenali dan melewatkan komentar.

Kumpulan pembatas (karakter yang memisahkan token) dapat ditentukan baik pada waktu pembuatan atau pada basis per token.

3. Menggunakan StringTokenizer

Contoh paling sederhana dari penggunaan StringTokenizer adalah dengan membagi String berdasarkan pembatas yang ditentukan.

Dalam contoh singkat ini, kita akan membagi String argumen dan menambahkan token ke dalam daftar :

public List getTokens(String str) { List tokens = new ArrayList(); StringTokenizer tokenizer = new StringTokenizer(str, ","); while (tokenizer.hasMoreElements()) { tokens.add(tokenizer.nextToken()); } return tokens; } 

Perhatikan bagaimana kita memecah String ke dalam daftar token berdasarkan pembatas ' , '. Kemudian di loop, menggunakan metode tokens.add () ; kami menambahkan setiap token ke ArrayList.

Misalnya, jika pengguna memberikan masukan sebagai " Selamat datang, ke, baeldung.com ", metode ini harus mengembalikan daftar yang berisi fragmen tiga kata seperti " Selamat Datang ", " ke " dan " baeldung.com ".

3.1. Pendekatan Java 8

Sejak StringTokenizer alat Pencacahan antarmuka, kita dapat menggunakannya dengan J ava 's Collections antarmuka.

Jika kita mempertimbangkan contoh sebelumnya, kita bisa mengambil set token yang sama menggunakan metode Collections.list () dan Stream API:

public List getTokensWithCollection(String str) { return Collections.list(new StringTokenizer(str, ",")).stream() .map(token -> (String) token) .collect(Collectors.toList()); }

Di sini, kami meneruskan StringTokenizer itu sendiri sebagai parameter dalam metode Collections.list () .

Point ke catatan di sini adalah bahwa, karena Pencacahan adalah Obyek jenis, kita perlu ketik-cast token ke String jenis (yaitu tergantung pada pelaksanaan, jika kita menggunakan Daftar dari Integer / Float maka kita harus mengetikkan-cast dengan Integer / Float ).

3.2. Varian dari StringTokenizer

StringTokenizer hadir dengan dua konstruktor kelebihan beban di samping konstruktor default: StringTokenizer (String str) dan StringTokenizer (String str, String delim, boolean returnDelims):

StringTokenizer (String str, String delim, boolean returnDelims) membutuhkanmasukan boolean ekstra. Jika boolean nilai ini benar , maka StringTokenizer menganggap pembatas itu sendiri sebagai tanda dan menambahkannya ke kolam renang internal token.

StringTokenizer (String str) adalah jalan pintas untuk contoh sebelumnya; itu secara internal memanggil konstruktor lain dengan pembatas kode keras sebagai "\ t \ n \ r \ f" dan nilai boolean sebagai salah.

3.3. Kustomisasi Token

StringTokenizer juga dilengkapi dengan metode nextToken () yang kelebihan beban yang mengambil fragmen string sebagai masukan. Fragmen String ini bertindak sebagai satu set pembatas ekstra; berdasarkan token mana yang diatur ulang.

Misalnya, jika kita dapat meneruskan ' e ' dalam metode nextToken () untuk memutus string lebih lanjut berdasarkan pembatas ' e ':

tokens.add(tokenizer.nextToken("e"));

Karenanya, untuk string ' Halo, baeldung.com ' yang diberikan, kami akan menghasilkan token berikut:

H llo ba ldung.com

3.4. Panjang Token

Untuk menghitung angka yang tersedia token, kita dapat menggunakan StringTokenizer 's ukuran metode:

int tokenLength = tokens.size();

3.5. Membaca Dari File CSV

Sekarang, mari kita coba menggunakan StringTokenizer dalam kasus penggunaan nyata.

Ada beberapa skenario saat kami mencoba membaca data dari file CSV dan mengurai data berdasarkan pemisah yang diberikan pengguna.

Menggunakan StringTokenizer , kita bisa dengan mudah membukanya :

public List getTokensFromFile( String path , String delim ) { List tokens = new ArrayList(); String currLine = ""; StringTokenizer tokenizer; try (BufferedReader br = new BufferedReader( new InputStreamReader(Application.class.getResourceAsStream( "/" + path )))) { while (( currLine = br.readLine()) != null ) { tokenizer = new StringTokenizer( currLine , delim ); while (tokenizer.hasMoreElements()) { tokens.add(tokenizer.nextToken()); } } } catch (IOException e) { e.printStackTrace(); } return tokens; }

Di sini, fungsi tersebut membutuhkan dua argumen; satu sebagai nama file CSV (yaitu membaca dari folder sumber daya [src -> main -> sumber] ) dan yang lainnya sebagai pembatas.

Berdasarkan dua argumen ini, data CSV dibaca baris demi baris, dan setiap baris diberi token menggunakan StringTokenizer .

Misalnya, kami telah meletakkan konten berikut di CSV:

1|IND|India 2|MY|Malaysia 3|AU|Australia

Karenanya, token berikut harus dibuat:

1 IND India 2 MY Malaysia 3 AU Australia

3.6. Menguji

Sekarang, mari buat kasus uji cepat:

public class TokenizerTest { private MyTokenizer myTokenizer = new MyTokenizer(); private List expectedTokensForString = Arrays.asList( "Welcome" , "to" , "baeldung.com" ); private List expectedTokensForFile = Arrays.asList( "1" , "IND" , "India" , "2" , "MY" , "Malaysia" , "3", "AU" , "Australia" ); @Test public void givenString_thenGetListOfString() { String str = "Welcome,to,baeldung.com"; List actualTokens = myTokenizer.getTokens( str ); assertEquals( expectedTokensForString, actualTokens ); } @Test public void givenFile_thenGetListOfString() List actualTokens = myTokenizer.getTokensFromFile( "data.csv", " }

4. Kesimpulan

Dalam tutorial singkat ini, kami telah melihat beberapa contoh praktis menggunakan inti Java StringTokenizer .

Like always, the full source code is available over on GitHub.