编码和解码字符串

时间:2016-04-01 19:06:14

标签: unicode-string

我需要编写一个应用程序,它将字符串转换为unicode,然后将2添加到unicode值以创建新字符串。

基本上,如果输入为:password是RhYxtz,那么输出应该如下所示:rcuuyqtf ku TjAzvb

以下代码是我目前所拥有的:

public static void main(String[] args){

    System.out.print ("Enter text: ");
    Scanner scan = new Scanner(System.in);
    String text = scan.nextLine();

    int length = text.length();

    for(int i = 0; i < length; i ++){
        char currentChar = text.charAt(i);
        int currentChar2 = currentChar+2;
        String s = String.format ("\\u%04x", currentChar2);
        System.out.println ("Encoded message: " + s);
    }

}

问题是我不知道如何将unicode转换回字母串以及如何保持格式与输入相同。谁能帮助我?谢谢。

3 个答案:

答案 0 :(得分:0)

试试这个:

import java.util.Scanner;
public class Example {
    public static void main(String[] args) {
            System.out.print ("Enter text: ");
            Scanner scan = new Scanner(System.in);
            String text = scan.nextLine();
            int length = text.length();
            String s = "";

    for(int i = 0; i < length; i ++){
        char currentChar = text.charAt(i);
        if (currentChar == ' '){
            s += currentChar;
        } else {
            s += (char) (currentChar + 2);
        }
    }
            System.out.println ("Encoded message: " + s);
    }
}

答案 1 :(得分:0)

Unicode代码点可以在java 8中收集为:

public static String encryped(String s) {
    int[] cps = s.codePoints()
            .mapToInt((cp) -> cp + 2)
            .toArray();
    return new String(cps, 0, cps.length);
}

或在早期版本中使用codePointAt的循环中。

Java char(2个字节)是UTF-16,它们的int值并不总是Unicode符号,也就是代码点。

答案 2 :(得分:0)

这适用于美国ASCII字母:

StringBuilder buf = new StringBuilder(length);

for(int i = 0; i < length; i ++){
    char currentChar = text.charAt(i);
    if (currentChar < 128 && Character.isLetter(currentChar)) {
        if (currentChar == 'y' || currentChar == 'z'
                || currentChar == 'Y' || currentChar == 'Z') {
            buf.append((char) (currentChar + 2 - 26));
        } else {
            buf.append((char) (currentChar + 2));
        }
    } else {
        buf.append(currentChar);
    }
}
System.out.println(buf.toString());