删除Java中的前导零

删除Java中的前导零,java,string,Java,String,给定一个有效的非空输入,该方法应返回所有前导零都已删除的输入。因此,如果输入为“0003605”,则该方法应返回“3605”。作为一种特殊情况,当输入仅包含零(如“000”或“0000000”)时,该方法应返回“0” public static String removeLeadingZeroes(String value): 我不知道如何为字符串“0000”编写代码。您可以添加对字符串长度的检查: public class NumberSystemService { /** * * P

给定一个有效的非空输入,该方法应返回所有前导零都已删除的输入。因此,如果输入为“0003605”,则该方法应返回“3605”。作为一种特殊情况,当输入仅包含零(如“000”或“0000000”)时,该方法应返回“0”

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();
    }