2014-03-04 22 views
0

我:簡單的方法來增加含有一個值,例如,一個字符串:USER1000

String username = "USER1" 
String username = "USER10000" 

我想增加像USER2 OR USER100001

的價值有一個簡單的方法來做到這一點,或者我應該循環槽String並檢查每個字符,如果它是一個數字並構造我的新字符串。

喜歡的東西

for(int i=username.length()-1; i>0; i--) { 
    if(!Character.isDigit(username.charAt(i))){ 

     //creating new string here 
    } 

} 

謝謝

回答

7

類似:

String un = "USER10000"; 
int digit = Integer.parseInt(un.replaceAll("\\D", "")); 
String newUn = "USER" + (digit + 1); 

你可以,如果更合適使用long

UPDATE:

"\\D"也可以被改寫爲"[^\\d]",因爲它們是匹配相同charachters

+1

Dind't你想說的話'「[^ \\ d]」'? – A4L

+0

是的,當然你是對的 – injecteer

+0

我愛stackoverflow :)謝謝。你能用''[^ \\ d]更新你的答案嗎?'我會以積極的思維方式使用'Long' :) – Merlin

1

你可以做到這一點老派:

String increment(String s) { 
    char[] a = s.toCharArray(); 
    boolean incremented = false; 
    for (int i = a.length - 1; i >= 0 && !incremented; i--) { 
     if (Character.isDigit(a[i])) { 
      if (a[i] == '9') { 
       a[i] = '0'; 
      } else { 
       a[i] = (char) (a[i] + 1); 
       incremented = true; 
      } 
     } 
    } 
    if (!incremented) { 
     throw new IllegalArgumentException("Failed to increment " + s); 
    } 
    return new String(a); 
} 
+0

因爲''USER9''失敗',因爲'遞增'沒有設置爲true,沒有使用n位數字和n + 1位數字,例如9 - > 10 – A4L

+0

@ A4L - 正確!這是OP沒有覆蓋的邊緣情況,所以我將它定義爲Exception。儘管這可以處理前導零,不像其他解決方案。 – OldCurmudgeon

+0

我認爲他自從他給第一個例子以來就這麼做了,「USER1」應該增加到「USER2」,並且從那個值繼續「USER9」會在某個時刻出現,只是說...... – A4L

相關問題