知っていると便利な章

4.16. 構文解析

『目的』

文字列を分断する方法を知りましょう。

『Before』

indexOf() や substring() によって文字の位置や部分文字列を取得できますよね。

部分文字列が欲しい目的で indexOf() や substring() を使ってみます。
区切り文字「.」があるインデックスを検出して部分文字列を取り出しています。

int index = 0;
int nextIndex = 0;

while ((nextIndex = string.indexOf('.', index)) != -1) {

    System.out.println(string.substring(index, nextIndex));
    index = nextIndex + 1;

}

substring のパラメータ指定はクセがあって使いにくいです。 インデックス指定が直感的にはわかりにくいためです。 インデックス指定は間違いを起こしやすいです。

"hamburger".substring(4, 8)

インデックス指定は0から始まるので(4, 8)指定は5文字目から9文字目、 つまり”urger” が返ってきそうです。

それは間違いです。”urge” が返されます。

beginIndex - 開始インデックス (この値を含む)
endIndex - 終了インデックス (この値を含まない)

わかりにくいですね。

『After』

区切り文字毎に文字列を切り出したいのであればStringTokenizerを使うと簡単です。

StringTokenizer tokenizer = new StringTokenizer(string, ".");

while (tokenizer.hasMoreTokens()) {
    System.out.println(tokenizer.nextToken());
}

インデックスを気にすることなく部分文字列を切り出してくれます。
改行コード毎に文字列を取り出す時などに便利ですね。

『まとめ』

substringメソッドはパラメータ指定を間違えやすいので注意しましょう。
文字列を切り出すときはStringTokenizerを利用しましょう。

< 前のページへ

Pagetop