我遇到了幾個問題,但我的問題沒有答案。
我有一個來自資料庫的代碼,格式為:FR000009。
輸出應為:FR000010
String original = "FR000009";
String incremented = "FR" String.format("%0" (original.length() - 2) "d",
Integer.parseInt(original.substring(2)) 1);
System.out.println(incremented);
與其他問題的不同之處在于:我想決議字串而不需要像上面的示例中那樣對 FR 進行硬編碼。隨著時間的推移,可能會有不同的國家代碼(DE、UK、RO 等)。
uj5u.com熱心網友回復:
您可以通過先剝離所有數字然后剝離所有非數字來使用此代碼:
String original = "FR000009";
String repl = String.format("%s%0" (original.length() - 2) "d",
original.replaceFirst("\\d ", ""),
(Integer.valueOf(original.replaceFirst("\\D ", "")) 1));
//=> "FR000010"
這里:
replaceFirst("\\d ", ""):從輸入中洗掉所有數字,給我們FRreplaceFirst("\\D ", ""):從輸入中洗掉所有非數字,給我們000009
請注意,如果開頭總是只有 2 個字母,其余的是數字,那么您甚至不需要正則運算式代碼,只需使用substring:
String repl = String.format("%s%0" (original.length() - 2) "d",
original.substring(0, 2),
(Integer.valueOf(original.substring(2)) 1));
uj5u.com熱心網友回復:
您需要一種可以傳入國家代碼并從舊字串創建新字串的方法。
你的要求不清楚。無論國家/地區代碼如何,我都無法判斷您是否總是想增加該值。
我認為您需要比字串更好的抽象。我不知道這個 String 是什么,但我會推薦一個帶有靜態計數器的類和一個接收國家代碼并在遞增計數器后回傳 String 值的方法。無需決議。
uj5u.com熱心網友回復:
為什么不只是在數字和字母之間分開:
String input = "FR100109";
String[] splited = input.split("(?<=\\D)(?=\\d)");
int incremented = Integer.parseInt(splited[1]) 1;
String formated = String.format("%0" splited[1].length() "d", incremented);
System.out.println(splited[0] formated);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/485667.html
