2

単語ごとに分割したい文字列がいくつかあります。それらは次のようなさまざまな形式です。

THIS-IS-MY-STRING
ThisIsMyString
This_Is_My_String
This is my string

私が使う:

String[] x = str1.split("(?=[A-Z])|[_]|[-]|[ ]");

しかし、いくつかの問題があります:

  1. x 配列の一部の要素が空になります
  2. 最初の文字列は「THIS」が必要ですが、分割の結果は「T」、「H」、「I」、「S」になります</li>

目的を達成するために分割をどのように変更すればよいですか? 手伝っていただけませんか?

4

2 に答える 2

4

後読みも含める必要があります。

String[] x = str1.split("([-_ ]|(?<=[^-_ A-Z])(?=[A-Z]))");

[-_ ]-または_またはスペースを意味します。

(?<=[^-_ A-Z])前の文字が-_、スペース、または ではないことを意味しA-Zます。

(?=[A-Z])は、次の文字が であることを意味しA-Zます。

参照

編集:

残念ながら、回避しながらsplit分割したり、空の文字列を使用したりする方法はありません (私が知っています) 。_CITY_ABC_CITY

ただし、空でない場合は最初と最後の文字列しか処理できませんが、これは理想的ではありません。

このために私は提案しMatcherます:

String str1 = "_CityCITY_";
Pattern p = Pattern.compile("[A-Z][a-z]+(?=[A-Z]|$)|[A-Za-z]+(?=[-_ ]|$)");
Matcher m = p.matcher(str1);
while (m.find())
   System.out.println(m.group());
于 2013-02-26T20:54:22.390 に答える
0

Regex.Split() を試してください。最初のパラメーターは分割する文字列で、2 番目の文字列は正規表現になります。お役に立てれば。

于 2013-02-26T20:44:16.033 に答える