いや、普通はこうだろ (Cのatoiとか)

replaceFirst("\\D.*","")

何れにしても、空になると例外出るから、初期値0にするのにもう一手間いるけど