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. 如果是12- 取并切断接下来的两位数字并转换为字符

  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

只是为了好玩,另外几个版本;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 回答
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
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;
}

这是一种非常基本的解密方法。它仅适用于[A-Za-z0-9]+美国 ASCII。

于 2013-02-06T19:50:53.717 回答