如何跟踪int并保持0

时间:2015-03-20 06:08:02

标签: java

Java问题, 假设我有一个像0000102这样的数字,0很重要,因为它们需要在那里。

如何以int(或允许我增加它的其他方式)保存此信息

例如,在检查数字0000102后,它会添加一个并检查0000103

当我尝试将其保存为int时,它只会恢复为102并消除0,因此在搜索数据库时不匹配,因为它不再相同。有没有人知道我可以做到这一点,如果没有删除0的。感谢

编辑:

我使用前导零添加的最终解决方案是这个函数,它需要一个前导0的字符串为它添加一个,然后返回字符串

String nextNum(String s){
    int number =0;
    String newNum =""; 
    int len = s.length();
    int newLength =0;
    for(int i =0; i < s.length()-1; i++){
      if (s.charAt(i) == '0')
        newNum+="0";
        else 
        break;      
    }
     number = Integer.parseInt(s);
     number++;
     newNum +=  String.valueOf(number);
     newLength = newNum.length();
     if(newLength == len)
    return newNum;
     else
    return newNum.substring(1); //incase number was 000099 it doesnt go to   0000100 it goes to   000100 instead 
  }

5 个答案:

答案 0 :(得分:5)

您可以将printf"%0d"合并使用字符串格式,如下所示:

    String num = "000123";
    Integer n = Integer.parseInt(num);
    n++;
    int len = num.length();
    System.out.printf("%0" + len + "d", n); //  000124

    // and if you want to store the result
    // back into a string:
    String res = String.format("%0" + len + "d", n);
    System.out.println(res); // 000124

答案 1 :(得分:1)

数字本身与数字的表示分开。与我们通常所说的相关的数字&#34; ten&#34;始终是计算这些数量的数量:||||||||||,但它有许多可能的字符串表示形式:&#34; 10&#34;,&#34; 0000010&#34;,&#34; 0x0a& #34;,&#34; 1010(2)&#34; ...(并非所有这些都是有效的Java表示,只是人类正在使用的各种表示)

您的号码将始终存储在计算机中,以便(大部分)准确处理数量。通常不存储字符串表示;它每次计算。例如,当您执行System.out.println(102)时,它实际上被处理为System.out.println(Integer.toString(102, 10))

102"0000102"之间,计算您要存储哪一个以及要显示哪一个,并在需要另一个时适当转换。

答案 2 :(得分:1)

您可以将值存储为int(不带零),但是当您想要打印或显示它时,可以将其转换为带有前导零的String。这是一个示例转换方法。

public String addZeroes(int value, int desiredLength) {
    String valueString = value + "";
    int valueLength = valueString.length();

    for (int i = 0; i < desiredLength - valueLength; i++) {
        valueString = "0" + valueString;
    }

    return valueString;
}

答案 3 :(得分:0)

您需要使用String

十进制数0001020102以及102(就此而言,十六进制数0x66)都是相同的整数值,没有办法将它们存储为int后区分它们。

如果要保留整数的特定字符表示,则需要一个字符串。

要增加String,您需要将其解析为Integer,然后重新格式化。

String increment(String s) {
  int n = Integer.parseInt(s, 10)
  return ("%0" + s.length() + "d").format(n+1); 
}

答案 4 :(得分:0)

你说你需要跟踪前导零,但这与数字本身是分开的。我会将数字本身保留为int,并使用所需的零数保留不同的变量。这将使数字保持数字的语义含义为数字(并允许递增,如您所说),并且在显示时,根据第二个值在需要时填充或填充零。