Answers:
正则表达式是完成这项工作的最佳工具。它应该是什么取决于问题规范。下面的代码删除前导零,但在必要时留下一个(即,它不仅会变成"0"
空白字符串)。
s.replaceFirst("^0+(?!$)", "")
该^
主播将确保该0+
所匹配是在输入的开始。该(?!$)
负前瞻确保不是整个字符串匹配。
测试线束:
String[] in = {
"01234", // "[1234]"
"0001234a", // "[1234a]"
"101234", // "[101234]"
"000002829839", // "[2829839]"
"0", // "[0]"
"0000000", // "[0]"
"0000009", // "[9]"
"000000z", // "[z]"
"000000.z", // "[.z]"
};
for (String s : in) {
System.out.println("[" + s.replaceFirst("^0+(?!$)", "") + "]");
}
.replaceFirst("^0+(?!$)".toRegex(), "")
您可以像这样从Apache Commons Lang使用StringUtils类:
StringUtils.stripStart(yourString,"0");
正则表达式的方式如何:
String s = "001234-a";
s = s.replaceFirst ("^0*", "");
^
字符串开头的锚点(我从上下文假设这里的字符串不是多行的,否则您可能需要查找输入\A
的开始而不是行的开头)。该0*
方法零个或多个0
字符(你可以使用0+
为好)。在replaceFirst
刚刚替换所有那些0
在一开始什么也没有的字符。
并且,如果像Vadzim一样,您对前导零的定义不包括将"0"
(或"000"
类似字符串)变成空字符串(足够合理的期望),则在必要时将其放回原处:
String s = "00000000";
s = s.replaceFirst ("^0*", "");
if (s.isEmpty()) s = "0";
一种无需regExp和任何外部库的清晰方法。
public static String trimLeadingZeros(String source) {
for (int i = 0; i < source.length(); ++i) {
char c = source.charAt(i);
if (c != '0') {
return source.substring(i);
}
}
return ""; // or return "0";
}
要配合失落者的Apache Commons答案:使用guava库(我认为Google的通用Java实用程序库现在应该在任何非平凡的Java项目的类路径中),将使用CharMatcher:
CharMatcher.is('0').trimLeadingFrom(inputString);
使用Apache Commons StringUtils
类:
StringUtils.strip(String str, String stripChars);
用这个:
String x = "00123".replaceAll("^0*", ""); // -> 123
使用正则表达式作为一些答案表明,这是一个很好的方法。如果您不想使用正则表达式,则可以使用以下代码:
String s = "00a0a121";
while(s.length()>0 && s.charAt(0)=='0')
{
s = s.substring(1);
}
String
...使用magiccrafter方法代替。
如果不使用Regex
或substring()
功能String
效率低下-
public static String removeZero(String str){
StringBuffer sb = new StringBuffer(str);
while (sb.length()>1 && sb.charAt(0) == '0')
sb.deleteCharAt(0);
return sb.toString(); // return in String
}
String s="0000000000046457657772752256266542=56256010000085100000";
String removeString="";
for(int i =0;i<s.length();i++){
if(s.charAt(i)=='0')
removeString=removeString+"0";
else
break;
}
System.out.println("original string - "+s);
System.out.println("after removing 0's -"+s.replaceFirst(removeString,""));
那只搜索第一个非零字符呢?
[1-9]\d+
此正则表达式查找1到9之间的第一个数字,后跟任意数量的数字,因此对于“ 00012345”,它返回“ 12345”。它可以轻松地适用于字母数字字符串。