Java 如何解析String.format添加0';s到int

Java 如何解析String.format添加0';s到int,java,string.format,Java,String.format,我想生成随机的国家标识号,当我用String.format()添加0以填充数字时,我无法将其解析回int public class NinGenerator { public static void Generator(sex name){ // sex is enum Random rand = new Random(); int year = rand.nextInt(60) + 40; // For starting at year

我想生成随机的国家标识号,当我用String.format()添加0以填充数字时,我无法将其解析回int

public class NinGenerator {

        public static void Generator(sex name){ // sex is enum

        Random rand = new Random();

        int year = rand.nextInt(60) + 40;   // For starting at year 40
        int month, day, finalNumbers;

        month = rand.nextInt(12) + 1;

        if(name == sex.FEMALE){ // In case of female
            month += 50;
        }

        switch(month){  // For max number of days to match given month
        ```
        case 1:
        case 3:
            day = rand.nextInt(30) + 1;
        ```
        }

        finalNumbers = rand.nextInt(9999) + 1;  // last set of numbers

        String nin = FillZeroes(year, 2) + FillZeroes(month, 2) + FillZeroes(day, 2) + FillZeroes(finalNumbers, 4); // Merging it into string

        // Here occurs error

        int ninInt = Integer.parseInt(nin); // Parsing it into number

        while(ninInt % 11 != 0){    // Whole number has to be divisble by 11 without remainder
            ninInt++;
        }

            System.out.println("National identification number: " + ninInt);

    }

    public static String FillZeroes(int number, int digits){    // For number to correspond with number of digits - filling int with zeros

        String text = String.valueOf(number);

        if(text.length() < digits){

            while(text.length() != digits){
                text = String.format("%d1", number);
            }
        }

        return text;
    }

}
公共类生成程序{
公共静态无效生成器(性别名称){//sex是枚举
Random rand=新的Random();
int year=rand.nextInt(60)+40;//用于从40年开始
整数月、日、最终数字;
月份=兰特(12)+1;
如果(name==sex.FEMALE){//如果是女性
月份+=50;
}
开关(月){//用于匹配给定月的最大天数
```
案例1:
案例3:
日=兰特·耐克斯汀(30)+1;
```
}
finalNumber=rand.nextInt(9999)+1;//最后一组数字
字符串nin=FillZeroes(年,2)+FillZeroes(月,2)+FillZeroes(天,2)+FillZeroes(最终数字,4);//将其合并到字符串中
//这里发生了错误
int ninInt=Integer.parseInt(nin);//将其解析为数字
而(ninInt%11!=0){//整数必须能被11整除,不带余数
ninInt++;
}
System.out.println(“国家识别号:+ninInt”);
}
公共静态字符串fillzero(int number,int digits){//For number对应于位数-用零填充int
String text=String.valueOf(number);
if(text.length()<位数){
while(text.length()!=位){
text=String.format(“%d1”,数字);
}
}
返回文本;
}
}

我想生成可被11整除的10位数字,无需提醒,编译器总是在解析时生成错误。我测试了您的代码,我相信您已经达到了int的上限。如果您尝试将“2147483647”作为nin值,它将运行,但一旦转到“2147483648”,您将得到相同的错误。如果您想解决这个问题,您可能必须使用一个数据类型,比如long或double,这取决于您想对它做什么

您的FillZeroes()函数可以是:

public static String FillZeroes(int number, int digits)
{
    String format = "d" + digits.ToString();
    return number.ToString(format);
}

你试过FillZeroes()来检查它是否做了它应该做的事情吗?请添加坏的
nin
值。是的,这是我忽略的问题,现在它很简单,我所要做的就是使用long ninit=long.parseLong(nin,10);