第二屆statment將刪除所有前面的零使用正則表達式並給出一個可以解析爲Long值的有效字符串。 (可以同時處理正數和負數)
String x = "000000-3946";
String xWithoutLeadingZeros = x.replaceFirst("^0+", "");
System.out.println(Long.parseLong(xWithoutLeadingZeros));
從評論:
上面的代碼replaceFirst
實際上會爲每個調用創建內部Pattern對象。
//code of String.replaceFirst
return Pattern.compile(regex).matcher(this).replaceFirst(replacement);
由於我們使用了大量的投入這種方法,創建模式對象,每次都是不正確的方法,因爲正則表達式是相同的所有投入。
所以我們只創建一次模式對象,希望它給出更好的性能結果。
private static final Pattern leadingZeroPattern = Pattern.compile("^0+");
private static final String EMPTY_STRING = "";
public static void main(String[] args) {
String x = "-232330000809";
String xWithoutZeros = leadingZeroPattern.matcher(x).replaceFirst(EMPTY_STRING);
System.out.println(Long.parseLong(xWithoutZeros));
}
#perfmatters
如果字符串是「-1234567809」,零將被替換? – GeekyDaddy
當然可以。只有前導零將被刪除。嘗試,如果你懷疑它。 – rajuGT
另外我覺得,解析具有前導零的數字串,將導致模糊。因爲以零開頭的數字被認爲是八進制數字。所以,如果我們正確地修剪字符串,一切都會正常工作,看起來很好。 – rajuGT