在Java String.toCharArray()中," "成为'

时间:2016-05-20 00:59:29

标签: char type-conversion ascii

我试图一次检查一个字符串,然后将这些字符更改为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。如何让它返回' '

1 个答案:

答案 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);