Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接字符';把它串成一条线_Java - Fatal编程技术网

Java 连接字符';把它串成一条线

Java 连接字符';把它串成一条线,java,Java,我有一个方法,它取一个BigInteger,生成另一个BigInteger(通过rsa算法),然后转换成二进制,然后分成8块,在那里我得到二进制字符串的ascii值 所有这些都有效 但是我很难从每个二进制字符串中获取ascii字符,并从中生成一个新字符串。我试图使用内置的concat方法,但它似乎不起作用 public static String Decrypt( BigInteger ct, BigInteger d, BigInteger mod ){ String pt

我有一个方法,它取一个BigInteger,生成另一个BigInteger(通过rsa算法),然后转换成二进制,然后分成8块,在那里我得到二进制字符串的ascii值

所有这些都有效

但是我很难从每个二进制字符串中获取ascii字符,并从中生成一个新字符串。我试图使用内置的concat方法,但它似乎不起作用

    public static String Decrypt( BigInteger ct, BigInteger d, BigInteger mod ){

    String pt = null;
    BigInteger message = ct.modPow(d, mod);     //the decrypted message M but still in BigInteger form
    String plaintext = message.toString(2);

    if( plaintext.length() % 8 != 0 ){
        plaintext = "00000000".substring( plaintext.length() % 8 ) + plaintext;
    }

    String c;
    int charCode = 0;
    for( int i = (plaintext.length()/8) - 1 ; i >= 0; i--){

        charCode = Integer.parseInt((plaintext.substring(i*8, (i*8)+8)) , 2) ;
        c = new Character( (char) charCode).toString();
        System.out.print(c);        // here is where i need something like pt.concat(c) or something like that, I dont really want it printed
    }                               // i just want all of these chars to be put into the string pt 
    System.out.println();
    return pt;
}
正如您在我所说的评论中所看到的,我的意思是,通过查看concat的API,我所做的似乎是正确的,但它就是不起作用


如果你能解释/说明问题所在,谢谢

1。您应该使用StringBuilder将字符附加到

二,。您的代码创建了很多字符串:
纯文本。子字符串(i*8,(i*8)+8))

下面是修复这两个问题的代码

public static void main(String... args) {

    String plaintext = "";

    { // preparing for test
        String input = "abc";
        for (char ch : input.toCharArray()) {
            String charAs8bits = String.format("%8s",
                    String.valueOf(Integer.toBinaryString(ch))).replace(
                    ' ', '0');
            plaintext = charAs8bits + plaintext;
        }
        System.out.println("plaintext = " + plaintext);
    }

    StringBuilder output = new StringBuilder();
    for (int i = plaintext.length() - 8; i >= 0; i -= 8) {

        boolean isDigit = Character.isDigit(plaintext.charAt(i)) //
                && Character.isDigit(plaintext.charAt(i + 1)) //
                && Character.isDigit(plaintext.charAt(i + 2)) //
                && Character.isDigit(plaintext.charAt(i + 3)) //
                && Character.isDigit(plaintext.charAt(i + 4)) //
                && Character.isDigit(plaintext.charAt(i + 5)) //
                && Character.isDigit(plaintext.charAt(i + 6)) //
                && Character.isDigit(plaintext.charAt(i + 7)) //
        ;

        if (isDigit) {
            int num = (Character.digit(plaintext.charAt(i), 2) << 7) //
                    + (Character.digit(plaintext.charAt(i + 1), 2) << 6) //
                    + (Character.digit(plaintext.charAt(i + 2), 2) << 5) //
                    + (Character.digit(plaintext.charAt(i + 3), 2) << 4) //
                    + (Character.digit(plaintext.charAt(i + 4), 2) << 3) //
                    + (Character.digit(plaintext.charAt(i + 5), 2) << 2) //
                    + (Character.digit(plaintext.charAt(i + 6), 2) << 1) //
                    + (Character.digit(plaintext.charAt(i + 7), 2)) //
            ;
            output.append((char) num);
        }
    }
    System.out.print("output = " + output);
}
UPD


我还将循环的
更改为对我来说更自然的视图-因此
I
指向“基本”索引。

1。您应该使用StringBuilder将字符附加到

二,。您的代码创建了很多字符串:
纯文本。子字符串(i*8,(i*8)+8))

下面是修复这两个问题的代码

public static void main(String... args) {

    String plaintext = "";

    { // preparing for test
        String input = "abc";
        for (char ch : input.toCharArray()) {
            String charAs8bits = String.format("%8s",
                    String.valueOf(Integer.toBinaryString(ch))).replace(
                    ' ', '0');
            plaintext = charAs8bits + plaintext;
        }
        System.out.println("plaintext = " + plaintext);
    }

    StringBuilder output = new StringBuilder();
    for (int i = plaintext.length() - 8; i >= 0; i -= 8) {

        boolean isDigit = Character.isDigit(plaintext.charAt(i)) //
                && Character.isDigit(plaintext.charAt(i + 1)) //
                && Character.isDigit(plaintext.charAt(i + 2)) //
                && Character.isDigit(plaintext.charAt(i + 3)) //
                && Character.isDigit(plaintext.charAt(i + 4)) //
                && Character.isDigit(plaintext.charAt(i + 5)) //
                && Character.isDigit(plaintext.charAt(i + 6)) //
                && Character.isDigit(plaintext.charAt(i + 7)) //
        ;

        if (isDigit) {
            int num = (Character.digit(plaintext.charAt(i), 2) << 7) //
                    + (Character.digit(plaintext.charAt(i + 1), 2) << 6) //
                    + (Character.digit(plaintext.charAt(i + 2), 2) << 5) //
                    + (Character.digit(plaintext.charAt(i + 3), 2) << 4) //
                    + (Character.digit(plaintext.charAt(i + 4), 2) << 3) //
                    + (Character.digit(plaintext.charAt(i + 5), 2) << 2) //
                    + (Character.digit(plaintext.charAt(i + 6), 2) << 1) //
                    + (Character.digit(plaintext.charAt(i + 7), 2)) //
            ;
            output.append((char) num);
        }
    }
    System.out.print("output = " + output);
}
UPD


我还将
for
循环更改为对我来说更自然的视图-以便
I
指向“基本”索引。

首先,请注意
String pt=null
,因此您将获得一个空点。其次,您可以设置
String pt=”“且具有
pt+=c位于感兴趣的位置。另外,您可以跳过
c=newcharacter(…)
,只需执行以下操作:
pt++(char)charCode但是concat不就可以去掉空值吗?谢谢你,伙计。如果你能给我一个答案,我会投赞成票:D工作得很有魅力!您使用二进制数字符号的字符串表示法的方法非常好。不过,如果你想要表现,我建议你使用。如果第一个字节为零,则删除它。然后使用剩余的字节来创建。这将短得多,速度也快得多,但如果出现任何错误,调试将更加困难。首先,请注意
String pt=null
,因此您将得到一个空指针。其次,您可以设置
String pt=“”且具有
pt+=c位于感兴趣的位置。另外,您可以跳过
c=newcharacter(…)
,只需执行以下操作:
pt++(char)charCode但是concat不就可以去掉空值吗?谢谢你,伙计。如果你能给我一个答案,我会投赞成票:D工作得很有魅力!您使用二进制数字符号的字符串表示法的方法非常好。不过,如果你想要表现,我建议你使用。如果第一个字节为零,则删除它。然后使用剩余的字节来创建。这将是一个短得多,快得多,但更难以调试的情况下出现任何错误。