Java StringTokenizerのクイックガイド
1概要
このクイック記事では、Javaの基本クラスである
StringTokenizer
について説明します。
** 2
StringTokenizer
**
StringTokenizer
クラスは
Strings
を複数のトークンに分割するのを助けます
StreamTokenizer
も同様の機能を提供しますが、トークン化方法はhttps://docsで使用される方法よりもずっと簡単です。 oracle.com/javase/8/docs/api/java/io/StreamTokenizer.html[
StreamTokenizer
]クラス。
StringTokenizer
のメソッドは、識別子、数字、および引用符付き文字列を区別したり、コメントを認識したりスキップしたりしません。
区切り文字のセット(トークンを区切る文字)は、作成時またはトークンごとに指定できます。
3
StringTokenizer
を使用する
StringTokenizer
を使用する最も簡単な例は、指定された区切り文字に基づいて
String
を分割することです。
この簡単な例では、引数Stringを分割し、トークンをリスト____に追加します。
public List<String> getTokens(String str) {
List<String> tokens = new ArrayList<>();
StringTokenizer tokenizer = new StringTokenizer(str, ",");
while (tokenizer.hasMoreElements()) {
tokens.add(tokenizer.nextToken());
}
return tokens;
}
String
を区切り文字 ‘
、
‘に基づいてトークンのリストに分割していることに注目してください。次に、ループ内で
tokens.add()
メソッドを使用します。各トークンを__ArrayListに追加します。
たとえば、ユーザーが ”
Welcome、to、baeldung.com
“として入力した場合、このメソッドは3ワードのフラグメントを含むリストを ”
Welcome
“、 ”
to
“、および ”
baeldung.com
“として返す必要があります。
3.1. Java 8アプローチ
StringTokenizer
は
Enumeration <Object>
インターフェースを実装しているので、J
__avaの
Collections__インターフェースで使用できます。
前の例を検討すると、
Collections.list()
methodと
Stream
APIを使用して同じトークンのセットを取得できます。
public List<String> getTokensWithCollection(String str) {
return Collections.list(new StringTokenizer(str, ",")).stream()
.map(token -> (String) token)
.collect(Collectors.toList());
}
ここでは、
StringTokenizer
自体を
Collections.list()
メソッドのパラメータとして渡しています。
-
ここで注意しなければならないのは、
Enumeration
は
Object
タイプなので、トークンを
String
タイプ** にタイプキャストする必要があるということです(つまり、実装によって異なります。
Integer/Float
)でキャストします。
** 3.2.
StringTokenizer
の亜種
**
StringTokenizer
には、デフォルトのコンストラクタの他に、2つのオーバーロードされたコンストラクタがあります。
-
StringTokenizer(String str、String delim、論理型returnDelims)
** は、追加の
boolean
入力を取ります。
boolean
値が
true
の場合、
StringTokenizer
は区切り文字自体をトークンと見なし、それをトークンの内部プールに追加します。 -
StringTokenizer(String str)** は、前の例のショートカットです。ハードコードされた区切り文字を
“\ t \ n \ r \ f”
、ブール値を
false.__として内部的にもう一方のコンストラクタを呼び出します
3.3. トークンのカスタマイズ
StringTokenizer
には、文字列フラグメントを入力として受け取る、オーバーロードされた
nextToken()
メソッドも付属しています。この
String
フラグメントは、追加の区切り文字セットとして機能します。どのトークンが再編成されたかに基づいて。
たとえば、
nextToken()
メソッドに
e
を渡して、区切り文字
e
に基づいて文字列をさらに分割することができます。
tokens.add(tokenizer.nextToken("e"));
したがって、「
こんにちは、baeldung.com
」という文字列に対して、次のトークンが生成されます。
H
llo
ba
ldung.com
** 3.4. トークン長
**
利用可能なトークンの数を数えるには、
StringTokenizer
‘s s
size
メソッドを使います。
int tokenLength = tokens.size();
3.5. CSVファイルからの読み取り
それでは、実際のユースケースで
StringTokenizer
を使用してみましょう。
CSVファイルからデータを読み取り、ユーザー指定の区切り文字に基づいてデータを解析しようとするシナリオがあります。
StringTokenizer
を使用すると、簡単にアクセスできます。
public List<String> getTokensFromFile( String path , String delim ) {
List<String> 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;
}
ここでは、この関数は2つの引数を取ります。 1つはCSVファイル名(つまりresources
[src – > main – > resources]
フォルダーから読み取る)で、もう1つは区切り文字として。
この2つの引数に基づいて、CSVデータは1行ずつ読み取られ、各行は
StringTokenizer
を使用してトークン化されます。
たとえば、CSVに次の内容を追加します。
1|IND|India
2|MY|Malaysia
3|AU|Australia
したがって、次のトークンが生成されるはずです。
1
IND
India
2
MY
Malaysia
3
AU
Australia
3.6. テスト中
それでは、簡単なテストケースを作成しましょう。
public class TokenizerTest {
private MyTokenizer myTokenizer = new MyTokenizer();
private List<String> expectedTokensForString = Arrays.asList(
"Welcome" , "to" , "baeldung.com" );
private List<String> expectedTokensForFile = Arrays.asList(
"1" , "IND" , "India" ,
"2" , "MY" , "Malaysia" ,
"3", "AU" , "Australia" );
@Test
public void givenString__thenGetListOfString() {
String str = "Welcome,to,baeldung.com";
List<String> actualTokens = myTokenizer.getTokens( str );
assertEquals( expectedTokensForString, actualTokens );
}
@Test
public void givenFile__thenGetListOfString() {
List<String> actualTokens = myTokenizer.getTokensFromFile(
"data.csv", "|" );
assertEquals( expectedTokensForFile , actualTokens );
}
}
4結論
このクイックチュートリアルでは、コアのJava
StringTokenizer
を使用した実際的な例をいくつか見てきました。
いつものように、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/java-strings[over on GitHub]から入手可能です。