Is this an efficient way of replacing words in a string
<p>I feel that there might be an more efficient way than searching the string three times looking for those matches to replace</p>

<pre><code>str.replaceAll("_", " ").replaceFirst("^\\w*\\d{3}\\w*", "")
      .replaceAll("20\\d{2}", "")
</code></pre>

<p>The above is in a for loop that loops over a long string line by line</p>

<ol>
<li>All _ (underscores)</li>
<li>A word that contains more than 3 numbers and is the first word in that line</li>
<li>Date 20** (2012,2013..)</li>
</ol>
