删除Java中的前导零
给定一个有效的非空输入,该方法应返回所有前导零都已删除的输入。因此,如果输入为“0003605”,则该方法应返回“3605”。作为一种特殊情况,当输入仅包含零(如“000”或“0000000”)时,该方法应返回“0”删除Java中的前导零,java,string,Java,String,给定一个有效的非空输入,该方法应返回所有前导零都已删除的输入。因此,如果输入为“0003605”,则该方法应返回“3605”。作为一种特殊情况,当输入仅包含零(如“000”或“0000000”)时,该方法应返回“0” public static String removeLeadingZeroes(String value): 我不知道如何为字符串“0000”编写代码。您可以添加对字符串长度的检查: public class NumberSystemService { /** * * P
public static String removeLeadingZeroes(String value):
我不知道如何为字符串“0000”编写代码。您可以添加对字符串长度的检查:
public class NumberSystemService {
/**
*
* Precondition: value is purely numeric
* @param value
* @return the value with leading zeroes removed.
* Should return "0" for input being "" or containing all zeroes
*/
public static String removeLeadingZeroes(String value) {
while (value.indexOf("0")==0)
value = value.substring(1);
return value;
}
如果字符串始终包含有效整数,
返回新整数(value).toString()代码>是最简单的
public static String removeLeadingZeroes(String value) {
while (value.length() > 1 && value.indexOf("0")==0)
value = value.substring(1);
return value;
}
我想先检查一下那个箱子。逐字符循环检查字符串是否为非“0”字符。如果您看到非“0”字符,请使用您拥有的流程。如果没有,请返回“0”。以下是我将如何做到这一点(未经测试,但很接近)
boolean allZero=true;
对于(inti=0;i,可以使用模式匹配器检查只有零的字符串
boolean allZero = true;
for (int i=0;i<value.length() && allZero;i++)
{
if (value.charAt(i)!='0')
allZero = false;
}
if (allZero)
return "0"
...The code you already have
您可以试试这个:
1.如果字符串的数值为0,则返回新字符串(“0”)
2.否则从字符串中删除零并返回子字符串
public static String removeLeadingZeroes(String value) {
if (Pattern.matches("[0]+", value)) {
return "0";
} else {
while (value.indexOf("0") == 0) {
value = value.substring(1);
}
return value;
}
}
公共静态字符串removeReadingZeroes(字符串str)
{
if(Double.parseDouble(str)==0)
返回新字符串(“0”);
其他的
{
int i=0;
对于(i=0;i使用String.replaceAll(),如下所示:
公共字符串替换前导零(字符串s){
s=s.replaceAll(“^[0]+”,”);
如果(s.等于(“”){
返回“0”;
}
返回s;
}
这将匹配所有前导零(使用regex^[0]+),并将它们全部替换为空白。最后,如果只剩下一个空白字符串,请返回“0”。您可以使用下面的替换函数,它将处理同时包含字母数字或数字的字符串
private String trimLeadingZeroes(inputStringWithZeroes){
final Integer trimZeroes = Integer.parseInt(inputStringWithZeroes);
return trimZeroes.toString();
}
停止重新发明轮子。
几乎没有任何软件开发问题是您第一次遇到的;
相反
这只是你第一次遇到它
您需要的几乎每一种实用方法都是由Apache项目和/或guava项目编写的(或我从未遇到过的类似项目)
读这本书。
这个实用程序可能已经提供了您所需要的所有字符串操作功能
解决问题的一些示例代码:
s.replaceFirst("^0+(?!$)", "")
指定基数10很重要,否则整数将被读取为八进制文字,并返回不正确的值
int n = 000012345;
n = Integer.valueOf(n + "", 10);
将输入转换为StringBuilder
使用deleteCharAt
方法从开头删除字符,直到找到非零字符为止
public String removeLeadingZeros(String num) {
String res = num.replaceAll("^0+", "").trim();
return res.equals("")? "0" : res;
}
此线程应该回答您的问题:添加一个if
语句以查找该条件。(在while
循环的开头)它是数字,所以“0000.1”可能是一个条目,但我喜欢您的答案。使用if(s.matches(^0+$)
会简单得多。这一点不错,但您可能希望使用“^0*$”)
为满足“应返回“0”中提到的空字符串大小写,输入为“”或包含所有零,“对吗?”,给定一个有效的非空输入“”:P/****前提条件:值为纯数字*\@param value*\@返回前导零已删除的值。*应返回“0”作为输入为“”或者包含所有零*/似乎无法在注释中获得正确的格式,但从方法Documentation来看,它可能有效,但当我尝试运行代码时,Java说模式无法解决。另一个问题是我还没有学会“模式”,所以可能不使用它:)@Claes您能分享更多错误的详细信息吗?这对我来说很好。欢迎使用Stack Overflow!虽然此代码片段可以解决此问题,但确实有助于提高您的文章质量。请记住,您将在将来为读者回答此问题,而这些人可能不知道您提出代码建议的原因。绝对是最好的答案。经验丰富的程序员尽可能使用经过验证的代码。StringUtils答案比“未经测试但接近”的答案要好得多。确切地说,这应该是这里的最佳答案,效果非常好。不适用于问题中的“特殊情况”-这将返回一个空字符串,而不是“0”。要使其正常工作,您可以将defaultString
替换为defaultIfEmpty
。与最新版本的commons-lang3
(3.11)相关,可能它在一些较旧的版本中起作用,但是,我完全同意答案开头的陈述。我真的很想在SO的主页上看到第一个,在java标记页上看到第二个。
public String stripLeadingZeros(final String data)
{
final String strippedData;
strippedData = StringUtils.stripStart(data, "0");
return StringUtils.defaultString(strippedData, "0");
}
public String removeLeadingZeros(String digits) {
//String.format("%.0f", Double.parseDouble(digits)) //Alternate Solution
String regex = "^0+";
return digits.replaceAll(regex, "");
}
removeLeadingZeros("0123"); //Result -> 123
removeLeadingZeros("00000456"); //Result -> 456
removeLeadingZeros("000102030"); //Result -> 102030
int n = 000012345;
n = Integer.valueOf(n + "", 10);
public String removeLeadingZeros(String num) {
String res = num.replaceAll("^0+", "").trim();
return res.equals("")? "0" : res;
}
String trimZero(String str) {
StringBuilder strB = new StringBuilder(str);
int index = 0;
while (strB.length() > 0 && strB.charAt(index) == '0') {
strB.deleteCharAt(index);
}
return strB.toString();
}