我需要编写一个应用程序,它将字符串转换为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转换回字母串以及如何保持格式与输入相同。谁能帮助我?谢谢。
答案 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());