文字列を 3 回検索して、置換する一致を探すよりも効率的な方法があると思います。
str.replaceAll("_", " ").replaceFirst("^\\w*\\d{3}\\w*", "")
.replaceAll("20\\d{2}", "")
上記は、長い文字列を 1 行ずつループする for ループにあります。
- すべて _ (アンダースコア)
- 3 つ以上の数字を含み、その行の最初の単語である単語
- 日付 20** (2012,2013..)
文字列を 3 回検索して、置換する一致を探すよりも効率的な方法があると思います。
str.replaceAll("_", " ").replaceFirst("^\\w*\\d{3}\\w*", "")
.replaceAll("20\\d{2}", "")
上記は、長い文字列を 1 行ずつループする for ループにあります。