2013-04-08 93 views
3

我正在使用它從我的輸入字符串中刪除前導零。如何從數字文本中刪除前導零?

return a.replaceAll("^0+",""); 

但是,上述字符串甚至從任何字母數字的字符串中刪除。我不想這樣做。我的要求是:

只應刪除數字的前導零,例如:

00002827393 -> 2827393 

如果您有一個字母數字編號,則不能刪除前導零,例如,

000ZZ12340 -> 000ZZ12340 
+1

@ syb0rg這是不太一樣的。在那個後面的零從所有字母數字字符串中刪除。在這裏他們只是從數字中刪除。 – 2013-04-08 22:10:13

+0

要求說明:字母數字字符可以位於字符串中的任何位置,也可以位於前導零之後? – aartist 2013-04-08 22:10:42

+0

@Harish你到目前爲止無法找到這個問題的答案? – Trying 2013-04-13 22:56:56

回答

4

測試傳入字符串是否匹配數字模式「\ d +」。 「\ d」是character class for digits。如果是數字,則將調用結果返回replaceAll,否則返回原始字符串。

if (str.matches("\\d+")) 
    return str.replaceAll("^0+", ""); 
return str; 

測試:

public static void main (String[] args) throws java.lang.Exception 
{ 
    System.out.println(replaceNumZeroes("0002827393")); 
    System.out.println(replaceNumZeroes("000ZZ1234566")); 
} 

產生輸出

2827393 
000ZZ1234566 
9

您可以檢查您的字符串僅由第一個數字:

Pattern p = Pattern.compile("^\\d+$"); 
Matcher m = p.matcher(a); 

if(m.matches()){ 
    return a.replaceAll("^0+", ""); 
} else { 
    return a; 
} 

另外:

  • 考慮對你的格局一成不變的,這樣只會創建一次
  • 您可能希望將部分與較小的功能,「isOnlyDigit」的匹配例如
5

您可以隔離也試試這個:

a.replaceAll("^0+(?=\\d+$)", "") 

注意,積極先行(?=\\d+$)檢查,以查看該字符串的其餘部分(起始0年代後,由匹配)由匹配/替換之前的唯一數字組成。


System.out.println("00002827393".replaceAll("^0+(?=\\d+$)", "")); 
System.out.println("000ZZ12340".replaceAll("^0+(?=\\d+$)", "")); 
 
2827393 
000ZZ12340 
+0

這是一些看起來很恐怖的正則表達式 – 2013-04-08 22:25:24

+1

@MikeRylander如果你明白它是怎麼回事作品:) – arshajii 2013-04-08 22:30:14

+1

@MikeRylander:不,[this](http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html)是一個可怕的正則表達式。 – 2013-04-08 22:47:50

0

邏輯: 它會轉換的字符串字符數組,並開始從i = 0;只要它擊中第一個數字值,就會從for循環中斷開,並且只要它碰到第一個字符(除了1到9),它就會返回相同的字符串。第一個for循環後,我們有以下情況要考慮:

case 1. 00000000000 
case 2. 00000011111 
case 3. 11111111111 

,如果是1或3(即從第一個for循環中我的值爲0或字符串的長度)情況下,那麼就返回字符串。否則,將第二種情況從char數組複製到一個新的char數組,從i的值開始(我的值將從第一個for循環獲得,並且它保存第一個數值位置)。希望它清除。 enter image description here

public String trimLeadingZeros(String str) 
    { 
    if (str == null) 
    { 
     return null; //if null return null 
    } 
    char[] c = str.toCharArray(); 
    int i = 0; 

    for(; i<c.length; i++) 
    { 
     if(c[i]=='0') 
     { 
      continue; 
     } 
     else if(c[i]>='1' && c[i]<='9') 
     { 
      break; 
     } 
     else 
     { 
      return str; 
     } 
    } 
    if(i==0 || i==c.length) 
    { 
     return str; 
    } 
    else 
    { 
     char[] temp = new char[c.length-i]; 
     int index = 0; 
     for(int j=i; j<c.length; j++) 
     { 
      temp[index++] = c[j]; 
     } 
     return new String(temp); 
    } 
    } 
0

只要我做了以下

String string = string.trim(); 
while(string.charAt(0) == '0'){ 
    string = string.substring(1); 
} 
+1

1.您錯過了「如果您有字母數字編號,則不能刪除前導零」的部分。 2.如果您的字符串有20個前導零,您將創建20個需要垃圾回收的字符串。 – stenix 2015-09-01 08:51:47