0

文字列の長さが3の倍数であるという条件の下で、個々の3文字の部分文字列を取得して整数に変換できるようにしようとしています。分割された部分文字列が変換される整数は、ASCII テーブルのすべての印刷文字を含む配列内の相対位置として機能するはずです。

 String IntMessage = result.toString();
   if 
   {
   (IntMessage.substring(0,1)=="1" && IntMessage.length()%3==0)
       for(j=0;j < IntMessage.length()-2;j += 3)
           n = Integer.parseInt(IntMessage.substring(j,j+3));
           mess += ASCII[n-32];
       return mess;

それ以外の場合、メソッドは文字列の最初の 2 文字を取得し、それらを変数 i に初期化する必要があります。この場合、変数 mess は、i-32 のインデックスを持つ ASCII 配列内の文字に初期化されます。次に、残りの文字を取得して 3 桁の部分文字列に分割する for ループがあり、それらが取得され、ASCII 配列内の対応する位置に従って文字列に変更されます。IntMessage String の BigInteger から String への変換を取得するために、この配列内の String 変数が変数 mess に継続的に追加されます。

   int i = Integer.parseInt(IntMessage.substring(0,2));

   mess=ASCII[i-32];
           for(l=2; l< IntMessage.length() - 2; l+=3)
               r = Integer.parseInt(IntMessage.substring(l,l+3));
               mess+=ASCII[r-32];
   return mess;

何らかの理由でメソッドが機能せず、何か間違ったことをしているのではないかと思っていました。入力文字列を取得して一連の数値に変換する方法は知っていますが、逆のこともしたいと思います。とにかくあなたが助けることができるものはありますか?

4

1 に答える 1

1

説明に基づいて、次の方法を使用できます。

String fromIntMessage(String msg) {
    StringBuilder result = new StringBuilder();
    for (int x = (msg.length() % 3 - 3) % 3; x < msg.length(); x += 3) {
        int chr = Integer.parseInt(msg.substring(Math.max(x, 0), x + 3));
        result.append(Character.toString((char) (chr - 32)));
    }
    return result.toString();
}

String toIntMessage(String string) {
    StringBuilder result = new StringBuilder();
    for (char c : string.toCharArray()) {
        result.append(String.format("%03d", c + 32));
    }
    return result.charAt(0) == '0' ? result.substring(1) : result.toString();
}

それはあなたに与えるでしょう

toIntMessage("DAA")             // => "100097097"
fromIntMessage("100097097")     // => "DAA"
于 2011-09-28T17:09:50.593 に答える