2016-04-10 14 views
1

文字列のすべての文字を新しいバイナリ文字列に変換したい。ここで私は何をすべきかです:javaでテキストをバイナリに変換する

public static void main(String args[]) { 
    String MESSAGE = "%"; 
    String binaryResult = ""; 
    for (char c : MESSAGE.toCharArray()){ 
     binaryResult += Integer.toBinaryString((int) c); 
    } 
    System.err.println(binaryResult); 
} 

入力とexempleの場合:「%」、私は次の出力を得る:「100101」 私の問題は、先頭の「0」が削除されていることです... は、私が欲しいですを持つ: "0100101"。誰にもアイデアはありますか?

+1

なぜ、先頭に0を付ける必要がありますか?バイナリでは、01001は1001に相当します。あなたのプログラムはいつ0を追加するのですか?それは常に7桁でなければなりませんか? – nhouser9

+1

あなたが探しているものは[this](http://stackoverflow.com/q/4421400/335858)ですか? – dasblinkenlight

+0

実際には、数字の桁数を指定したくないため、いいえ。私はちょうどそこに0がある場合は先頭にしたい。 – Astrus

答えて

1

あなたが実際に言っていることは、「文字のバイナリ文字列表現を7桁に埋め込むにはどうすればよいですか」です。これらにより

binaryResult += Integer.toBinaryString((int) c); 

String binString = Integer.toBinaryString((int) c); 
binaryResult += ("0000000" + binString).substring(binString.length()); 

これはあなただけあなたがより多くを必要とする場合は、「00000に0を追加... 7ビット文字を持っていることを前提とし

この行を置き換え"あなたが望む文字列の長さ(padded 0s)に一致する文字列。

+0

はい、私の目標でした!私は自分自身を明確にしませんでした...しかし、文字 "%"の場合、あなたのbinString varは長さが6でなく7ではありませんか? – Astrus

+0

私が言ったのは、MAXの7ビットでした。コードを試して、あなたのために動作するかどうかを確認してください。この部分文字列呼び出しは、この場合char 6でSTARTに...文字列に7文字を返します。 – billjamesdev

+0

ありがとうございました! – Astrus

1

既存のコードにいくつか変更を加えることをお勧めします。ループの中で文字列に連結しているので、不変なので、新しい文字列オブジェクトの束が作成されます。この問題は、StringBuilderを使用して解決することができます。

public static void main(String args[]) { 
    String MESSAGE = "%"; 
    StringBuilder binaryResult = new StringBuilder(); 
    for (char c : MESSAGE.toCharArray()) { 
     StringBuilder curValue = new StringBuilder(Integer.toBinaryString((int)c)); 

     // calculate padding 0 bits to fill to 8 bits 
     int paddingLength = 8 - curValue.length(); 
     char[] paddingArr = new char[paddingLength]; 
     Arrays.fill(paddingArr, '0'); 

     // insert padding bytes to the front 
     curValue.insert(0, paddingArr); 

     // add to stringbuilder for `MESSAGE` 
     binaryResult.append(curValue); 
    } 
    System.err.println(binaryResult.toString()); 
} 
+0

何らかの理由で、8ビットまたは7ビットなどが必要なものを含める場合は、変更する必要のある「8」を見つけるのは難しくないと思います。 :) –

+0

ありがとうございましたあなたの助けを借りて:) – Astrus

関連する問題