Javaで引用符で囲まれていないスペースで文字列を分割します(つまり、\ "hello world\ "を1つのトークンとして扱います)[重複] 質問する

Javaで引用符で囲まれていないスペースで文字列を分割します(つまり、\

Stringスペースに基づいて分割し、引用符で囲まれた部分文字列を 1 つの単語として扱うにはどうすればよいですか?

例:

Location "Welcome  to india" Bangalore Channai "IT city"  Mysore

ArrayList次のように保存する必要があります

Location
Welcome to india
Bangalore
Channai
IT city
Mysore

ベストアンサー1

方法は次のとおりです。

String str = "Location \"Welcome  to india\" Bangalore " +
             "Channai \"IT city\"  Mysore";

List<String> list = new ArrayList<String>();
Matcher m = Pattern.compile("([^\"]\\S*|\".+?\")\\s*").matcher(str);
while (m.find())
    list.add(m.group(1)); // Add .replace("\"", "") to remove surrounding quotes.


System.out.println(list);

出力:

[Location, "Welcome  to india", Bangalore, Channai, "IT city", Mysore]

正規表現は単純に

  • [^"]     - 以外の文字で始まるトークン"
  • \S*       - 0個以上のスペース以外の文字が続く
  • ...または...
  • ".+?"   -"記号の後に何かが続き、別の記号が現れるまで続きます"

おすすめ記事