我正在使用它從我的輸入字符串中刪除前導零。如何從數字文本中刪除前導零?
return a.replaceAll("^0+","");
但是,上述字符串甚至從任何字母數字的字符串中刪除。我不想這樣做。我的要求是:
只應刪除數字的前導零,例如:
00002827393 -> 2827393
如果您有一個字母數字編號,則不能刪除前導零,例如,
000ZZ12340 -> 000ZZ12340
我正在使用它從我的輸入字符串中刪除前導零。如何從數字文本中刪除前導零?
return a.replaceAll("^0+","");
但是,上述字符串甚至從任何字母數字的字符串中刪除。我不想這樣做。我的要求是:
只應刪除數字的前導零,例如:
00002827393 -> 2827393
如果您有一個字母數字編號,則不能刪除前導零,例如,
000ZZ12340 -> 000ZZ12340
測試傳入字符串是否匹配數字模式「\ 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
您可以檢查您的字符串僅由第一個數字:
Pattern p = Pattern.compile("^\\d+$");
Matcher m = p.matcher(a);
if(m.matches()){
return a.replaceAll("^0+", "");
} else {
return a;
}
另外:
您可以隔離也試試這個:
a.replaceAll("^0+(?=\\d+$)", "")
注意,積極先行(?=\\d+$)
檢查,以查看該字符串的其餘部分(起始0
年代後,由匹配)由匹配/替換之前的唯一數字組成。
System.out.println("00002827393".replaceAll("^0+(?=\\d+$)", ""));
System.out.println("000ZZ12340".replaceAll("^0+(?=\\d+$)", ""));
2827393 000ZZ12340
這是一些看起來很恐怖的正則表達式 – 2013-04-08 22:25:24
@MikeRylander如果你明白它是怎麼回事作品:) – arshajii 2013-04-08 22:30:14
@MikeRylander:不,[this](http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html)是一個可怕的正則表達式。 – 2013-04-08 22:47:50
邏輯: 它會轉換的字符串字符數組,並開始從i = 0;只要它擊中第一個數字值,就會從for循環中斷開,並且只要它碰到第一個字符(除了1到9),它就會返回相同的字符串。第一個for循環後,我們有以下情況要考慮:
case 1. 00000000000
case 2. 00000011111
case 3. 11111111111
,如果是1或3(即從第一個for循環中我的值爲0或字符串的長度)情況下,那麼就返回字符串。否則,將第二種情況從char數組複製到一個新的char數組,從i的值開始(我的值將從第一個for循環獲得,並且它保存第一個數值位置)。希望它清除。
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);
}
}
只要我做了以下
String string = string.trim();
while(string.charAt(0) == '0'){
string = string.substring(1);
}
1.您錯過了「如果您有字母數字編號,則不能刪除前導零」的部分。 2.如果您的字符串有20個前導零,您將創建20個需要垃圾回收的字符串。 – stenix 2015-09-01 08:51:47
@ syb0rg這是不太一樣的。在那個後面的零從所有字母數字字符串中刪除。在這裏他們只是從數字中刪除。 – 2013-04-08 22:10:13
要求說明:字母數字字符可以位於字符串中的任何位置,也可以位於前導零之後? – aartist 2013-04-08 22:10:42
@Harish你到目前爲止無法找到這個問題的答案? – Trying 2013-04-13 22:56:56