So f.e.我有一个文件 ala.xs,其中包含:“sąłs”,我想从该文件中读取这些符号,然后将它们放入短裤表中,然后在标准输出上打印它们。我在这方面遇到了一些麻烦,因为我必须将它们作为单个字符读取,然后将这些字符加入短裤中。 这是我的代码:
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
public class Main {
public static void main(String[] args) throws IOException {
short [] words = new short[10];
for(int i = 0 ; i < 10; i++)
words[i] = 0;
Reader reading = new FileReader("ala.xs");
short character;
int i = 0;
while ((character = (short) reading.read()) != -1) {
words[i] = character;
System.out.println(words[i]);
i++;
}
reading.close();
}
}
我试着像
System.out.println((char)words[i]);
那样打印它们,但这太愚蠢了。我在 C 中有同样的任务要做,在 C 中我只需要将它们打印为 %c 并且 stdout 自动加入它们(这是我的理论)
假设您正在尝试读取输入文件的所有字符,而不是使用
short
的数组直接将字符连接成一个字符串。使用 StringBuilder 比直接连接到 String 更有效,因为 Java 中的 Strings 是不可变的。
应该是这样的:
char character;
StringBuilder text;
while ((character = (char) reading.read()) != -1) {
text.append(character);
}
String words=text.toString();
根据我上面的评论,您的代码的正确容器是
int[]
。知道你的编码是UTF-8,下面应该给你你想要的
public static int[] fileToCodepointArray(Path p) throws IOException {
byte[] fileContents = Files.readAllBytes(p);
return new String(fileContents, StandardCharsets.UTF_8).codePoints().
toArray();
}
只需使用 System.out.print 而不是 System.out.println 即可将其打印到新行。