import java.util.ArrayList;
import java.util.List;
public class StringSplitExample {
public static void main(String[] args) {
String input = "This is a sample \"string\" with multiple spaces";
List<String> words = new ArrayList<>();
boolean insideQuotes = false;
StringBuilder wordBuilder = new StringBuilder();
for (char c : input.toCharArray()) {
if (c == '\"') {
insideQuotes = !insideQuotes;
} else if (c == ' ' && !insideQuotes) {
if (wordBuilder.length() > 0) {
words.add(wordBuilder.toString());
wordBuilder = new StringBuilder();
}
} else {
wordBuilder.append(c);
}
}
if (wordBuilder.length() > 0) {
words.add(wordBuilder.toString());
}
// 分割された単語の表示
for (String word : words) {
System.out.println(word);
}
}
}
上記のコードでは、与えられた文字列 input
を文字列全体を走査しながら処理しています。insideQuotes
フラグは、現在引用符の内部にいるかどうかを示すために使用されます。wordBuilder
は、単語を構築するための一時的なバッファです。
文字列が引用符で囲まれている場合、insideQuotes
は true
に設定されます。引用符が閉じられると、insideQuotes
は false
に切り替わります。
文字列を一文字ずつ処理しながら、以下のルールに従って単語を分割します:
- もし文字が引用符
"
の場合、insideQuotes
フラグを反転させます。 - もし文字がスペース
' '
の場合、かつinsideQuotes
フラグがfalse
の場合、現在の単語をwords
リストに追加します。 - 上記の条件に当てはまらない場合、文字を現在の単語に追加します。
最後に、wordBuilder
に残っている最後の単語を words
リストに追加します。
上記のコードを実行すると、次の結果が表示されます:
This
is
a
sample
"string"
with
multiple
spaces