1. 概要

このチュートリアルでは、2つのアプローチを使用して、区切り文字が最初に出現したときにのみ分割Java文字列する方法を学習します。

2. 問題文

たとえば、各行を2つの部分で構成される文字列として持つテキストファイルがあるとします。左側の部分は人の名前を示し、右側の部分は挨拶を示します。

Roberto "I wish you a bug-free day!"
Daniele "Have a great day!"
Jonas "Good bye!"

続いて、各行から人の名前を取得します。

右側の他の単語と同じように、両方の部分が「」(スペース)で区切られていることがわかります。 したがって、区切り文字はスペース文字になります。

3. split()メソッドの使用

Stringクラスのsplit()インスタンスメソッドは、提供された正規表現に基づいて文字列を分割します。 さらに、オーバーロードされたバリアントの1つを使用して、必要な最初のオカレンスを取得できます。

limitをパラメーターとしてsplit()メソッドに指定して、パターンを適用する回数、つまり結果の配列内のトークンの最大数を指定できます。 たとえば、limitn n > 0)とすると、パターンは最大でn-1に適用されます。 回。

ここでは、スペース( “”)を正規表現として使用して、スペースが最初に出現したときにStringを分割します。

その結果、オーバーロードされた split()メソッドを使用して、各行を2つの部分にトークン化できます。

public String getFirstWordUsingSplit(String input) {
    String[] tokens = input.split(" ", 2);
    return tokens[0];
}

したがって、この例の最初の行をこのメソッドへの入力として渡すと、「Roberto」が返されます。

ただし、入力 String に単語が1つしかない場合、またはスペースがない場合、上記のメソッドは同じStringを返すだけです。

これをテストしてみましょう:

assertEquals("Roberto", getFirstWordUsingSplit("Roberto \"I wish you a bug-free day\""));
assertEquals("StringWithNoSpace", getFirstWordUsingSplit("StringWithNoSpace"));

4. substring()メソッドの使用

Stringクラスのsubstring()メソッドは、 Stringのサブストリングを返します。これはオーバーロードされたメソッドであり、オーバーロードされたバージョンの1つがを受け入れます。 index を実行し、指定されたインデックスまで文字列内のすべての文字を返します。

substring() indexOf()を組み合わせて、同じ問題を解決しましょう。

まず、最初のスペース文字のインデックスを取得します。 次に、結果となるこのインデックス、人の名前までの部分文字列を取得します。

public String getFirstWordUsingSubString(String input) {
    return input.substring(0, input.indexOf(" "));
}

以前と同じ入力Stringを渡すと、メソッドは String “ Roberto”を返します。

ただし、入力文字列にスペースが含まれていない場合、このメソッドはStringIndexOutOfBoundsExceptionをスローします。一致するものが見つからない場合、 indexOf()メソッドは-1を返します。

この例外を回避するために、上記のメソッドを変更できます。

public String getFirstWordUsingSubString(String input) {
    int index = input.contains(" ") ? input.indexOf(" ") : 0;
    return input.substring(0, index);
}

ここで、スペースを含まない String をこのメソッドに渡すと、空のStringが返されます。

これをテストしてみましょう:

assertEquals("Roberto", getFirstWordUsingSubString("Roberto \"I wish you a bug-free day\""));
assertEquals("", getFirstWordUsingSubString("StringWithNoSpace"));

5. 結論

この記事では、Javaで区切り文字が最初に出現したときにのみStringを分割する2つのアプローチを見てきました。

いつものように、コードはGitHubから入手できます。