请参阅Converting Letters to Numbers
在文件test.in.rtf
中,我输入了'abcd'。但是,当我运行该程序时,我会在??? ??????????? ???????? plus maybe a few more
中获得test.out.rtf
。为什么是这样?我错过了什么吗?
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.StringTokenizer;
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader f = new BufferedReader(new FileReader("test.in.rtf"));
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("test.out.rtf")));
StringTokenizer st = new StringTokenizer(f.readLine());
StringBuilder sb = new StringBuilder();
for (char c : st.nextToken().toCharArray()) {
sb.append((char)(c - 'a' + 1));
}
out.println(sb); // output result
out.close(); // close the output file
System.exit(0);
}
}
答案 0 :(得分:2)
我很确定你想要
sb.append(Integer.toString(c - 'a' + 1));
或只是
sb.append( c - 'a' + 1 );
隐式地执行相同的操作,因为表达式c - 'a' + 1
被隐式转换为int
,因为Java会执行所有非long
整数数学(涉及char
s的任何内容,byte
s,short
和/或int
s)首先将所有内容转换为int
。
你将整数结果转换为char
,它将由ASCII值为该数字的字符(b / w 1和26)表示,这不是可读的。
答案 1 :(得分:1)
您正在尝试写入char值1,2,3和4('a' - 'a'+ 1 = 1等等),这些都是“不可写的”,因此是“?”。你为什么得到7而不是4?我不知道 - 可能是一个语言环境问题,或者其中三个只是写成两个“?”。