我试图一次检查一个字符串,然后将这些字符更改为ASCII码。除了文本中的空格变成''
(没有空格)而不是' '
(带空格)之外,我才能使用它。
Scanner in = new Scanner(original_file);
PrintWriter out = new PrintWriter("encoded_message.txt");
text_file = "";
while (in.hasNextLine()) {
text_file += in.nextLine() + "\n";
}
char[] text_file_array = text_file.toCharArray();
for (char c : text_file_array) {
int code = Character.getNumericValue(c); //<-- The problem is here.
out.println(code);
}
in.close();
out.close();
运行此操作时,c
变为''
,使code
的值为-1。我后来在数组中使用code
。如何让它返回' '
?
答案 0 :(得分:1)
Character.getNumericValue()方法返回 unicode 数值而不是 ASCII 值。
e.g。对于'e',ASCII为101,unicode为14。
ASCII相对简单:
int ascii = (int) character;
Convert character to ASCII numeric value in java
getNumericValue的javadoc讨论了这个问题,但却没有说明问题:
https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getNumericValue%28char%29
字母AZ大写('\ u0041'到'\ u005A'),小写('\ u0061'到'\ u007A')和全宽变体('\ uFF21'到'\ uFF3A'和' \ uFF41'到'\ uFF5A')表单的数值从10到35.这与Unicode规范无关,Unicode规范不会为这些char值赋值。
如果字符没有数字值,则返回-1。如果字符具有无法表示为非负整数的数值(例如,小数值),则返回-2。
c
实际上并未变为''
(没有空格)。如果您将out.println
方法更改为此(调试,是吗?您可以稍后进行清理),您可以获得更多信息:
out.println("'" + c + "'" + " " + code + " " + (int)c);