数字と文字を含む文字列があります。文字列を連続した数字のチャンクと連続した文字のチャンクに分割したいと考えています。
文字列「34A312O5M444123A」を考えてみましょう。
出力したい: ["34", "A", "312", "O", "5", "M", "444123", "A"]
私は動作し、次のようなコードを持っています:
List<String> digitsAsElements(String str){
StringBuilder digitCollector = new StringBuilder();
List<String> output = new ArrayList<String>();
for (int i = 0; i < str.length(); i++){
char cChar = str.charAt(i);
if (Character.isDigit(cChar))
digitCollector.append(cChar);
else{
output.add(digitCollector.toString());
output.add(""+cChar);
digitCollector = new StringBuilder();
}
}
return output;
}
str を 2 回分割して、すべての数字のチャンクを含む配列とすべての文字のチャンクを含む配列を取得することを検討しました。次に、結果をマージします。可読性を損なうため、これを避けました。
正規表現パターンは読みやすさの大きな障害であることがわかったので、正規表現パターンでこれを解決することを意図的に避けました。
- デバッガーはそれらをうまく処理しません。
- それらは、誰かがソース コードを読む流れを妨げます。
- 残業正規表現は有機的に成長し、モンスターになります。
- 彼らは非常に直感的ではありません。
私の質問は次のとおりです。
- 上記のコードの読みやすさを改善するにはどうすればよいですか?
- これを行うより良い方法はありますか?この問題をエレガントに解決する Util クラス。
- 正規表現を使用することと、私が上で書いたものに似たものをコーディングすることの境界線はどこにあるのでしょうか?
- regExes の可読性/保守性をどのように向上させますか?