2
public static String basicEncrypt(String s) {
    String toReturn = "";
    for (int j = 0; j < s.length(); j++) {
        toReturn += (int)s.charAt(j);
    }
    //System.out.println("Encrypt: " + toReturn);
    return toReturn;    
}

これを逆にして元の文字列を見つける方法はありますか? とても有難い。

4

4 に答える 4

1

ASCII 文字 (32-255 コード) のみを使用すると仮定すると、アルゴリズムは単純です。

  1. 入力の最初の文字を取る

  2. 1または-の場合2は、次の 2 桁を切り取り、文字に変換します。

  3. 他の文字の場合 - 次の桁を切り取って文字に変換します

  4. 1. 入力が残っている場合

これは素早い Scala の実装です。

def decrypt(s: String): String = s.headOption match {
    case None => ""
    case Some('1') | Some('2') => s.substring(0, 3).toInt.toChar + decrypt(s.substring(3))
    case Some(_) => s.substring(0, 2).toInt.toChar + decrypt(s.substring(2))
}
于 2013-02-06T19:45:00.553 に答える
0
private static String basicDecrypt(String s) {
    String result = "";
    String buffer = "";
    for (int i = 0; i < s.length(); i++) {
        buffer += s.charAt(i);
        if ((buffer.charAt(0) == '1' && buffer.length() == 3) || (buffer.charAt(0) != '1' && buffer.length() == 2)) {
            result += (char) Integer.parseInt(buffer);
            buffer = "";
        }
    }
    return result;
}

これは非常に基本的な復号化方法です。USASCIIでのみ機能し[A-Za-z0-9]+ます。

于 2013-02-06T19:50:53.717 に答える
0

はい、元の文字列が (32) と unicode charcode 299 の間の文字で構成されていることを考慮すると、http: //www.asciitable.com/ を参照してください。

Psuedo code
ret=<empty string>
while not end of string
  n=next number from string
  if n<3 charcode= n + next 2 numbers
  else
     charcode=n + next number
  ret=ret + character(charcode)
end while

スペースの下 (改行と改行) および 299 を超える文字コードは、このアルゴリズムを妨げます。このアルゴリズムは、charcode 319 までの文字を含めるように修正できます。

于 2013-02-06T19:46:28.613 に答える
0

楽しみのために、別のバージョンをいくつか。Java、US-ASCII のみ、文字 0x14 ~ 0xc7。

public static String basicDecrypt(String input)
{
    StringBuffer output = new StringBuffer();
    Matcher matcher = Pattern.compile("(1..|[2-9].)").matcher(input);
    while(matcher.find())
        output.append((char)Integer.parseInt(matcher.group()));
    return output.toString();
}

0x1e-0xff の場合、正規表現を"([12]..|[3-9].)"

...そしてやや簡潔な Linq'y C# バージョン。

private static string BasicDecrypt(string input)
{
    return new string(Regex.Matches(input, "(1..|[2-9].)").Cast<Match>()
                           .Select(x => (char) Int32.Parse(x.Value)).ToArray());
}
于 2013-02-06T20:45:50.593 に答える