使用简单加密的NumberFormatException

时间:2015-10-28 22:53:32

标签: java numberformatexception

package codeCracker;

public class CodeCracker {
    private String encrypt;
    private int encry;

    public CodeCracker(String encryptmelong) {
        encrypt = encryptmelong;
    }

    public String idolnum() {
        String in;
        in = encrypt;
        in = in.replaceAll("\\D+", "");
        encry = Integer.valueOf(in);
        encrypt = encrypt.replace(in, "");
        // System.out.println(encry);
        return in;
    }

    public String encrypt() {
        // encrypt+=encry;

        String encrypted = "";
        String charen = "";
        for (int i = 0; i < encrypt.length(); i++) {
            charen += encrypt.charAt(i);
            // System.out.println(charen.charAt(i));
        }
        for (int i = 0; i < charen.length(); i++) {
            System.out.println(encry);
            int temp = Integer.parseInt(idolnum());
            System.out.println("" + temp + " " + (int) encrypt.charAt(i));
            temp = (int) encrypt.charAt(i) + temp;
            encrypted = encrypted + (char) temp;
            // System.out.println(encrypted.charAt(i));
        }
        return encrypted;

    }

    public String toString() {
        return encrypt();
    }

    public static void main(String[] args) {
        CodeCracker code = new CodeCracker("5 encryptme");
        System.out.println(code);
    }

}

我对加密有疑问。该程序应该接收一个字符串和一个数字,并用这个数字增加每个字符。这不起作用。它正确接收数字但不正确添加字符。我也在线程“main”中收到异常错误:输入字符串:“”

Exception in thread "main" java.lang.NumberFormatException: For input string: "" at
    Java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at 
    java.lang.Integer.parseInt(Integer.java:504) at 
    java.lang.Integer.valueOf(Integer.java:582) at 
    codeCracker.CodeCracker.idolnum(CodeCracker.java:15) at 
    codeCracker.CodeCracker.encrypt(CodeCracker.java:34) at 
    codeCracker.CodeCracker.toString(CodeCracker.java:44) at 
    java.lang.String.valueOf(String.java:2854) at 
    java.io.PrintStream.println(PrintStream.java:821) at 
    codeCracker.CodeCracker.main(CodeCracker.java:50)

1 个答案:

答案 0 :(得分:1)

这不好:

    for (int i = 0; i < charen.length(); i++) {
        System.out.println(encry);
        int temp = Integer.parseInt(idolnum());
        System.out.println("" + temp + " " + (int) encrypt.charAt(i));
        temp = (int) encrypt.charAt(i) + temp;
        encrypted = encrypted + (char) temp;
        // System.out.println(encrypted.charAt(i));
    }

你在for循环中多次调用idolnum(),包括从原始字符串中提取数字字符串之后,所以当你第二次这样做时,你得到{{1}试图解析“”。而不是这样做,只需调用NumberFormatException一次,然后再调用for循环。然后每当需要加密int时使用encry int。

请注意,如果这是我的项目,我会以不同的方式组织它。我只将加密int传递给类,然后允许它加密和解密传递给它的任何字符串。例如:

diolnum()