做了Console类(控制台)和Add类(添加到文件),Add类里将键入的汉字追加到ArrayList,然后输出到txt,用utf-8编码,这个类运行操作都没问题,可是用Console类调用Add类时,键入的汉字却不被识别了,为什么呢?
以下是部分代码
Add类的识别汉字的代码
public static boolean rules(String newXingShi) {
boolean flag = newXingShi.matches("[\\u4e00-\\u9fa5]{1,4}");
if (flag == true) {
return true;
} else {
System.out.println("输入不符合规范,添加失败!");
return false;
}
}
Add类运行主方法结果
请输入要添加的:
即
添加成功!
Console类调用Add类
AddXingShi.main(null);
运行结果
请输入要添加的:
即
输入不符合规范,添加失败!
请问这个是什么问题?
根据您提供的代码和描述,问题可能出现在字符编码上。您描述的现象表明在Console类中键入的汉字在传递给Add类之后无法被正确识别。这可能与字符编码不一致有关。
在Java中,默认的字符编码是UTF-8,但有时在控制台中输入时可能会有不同的编码。您可以尝试以下方法来解决这个问题:
1、指定控制台编码: 在您的Console类中,尝试使用System.in的Scanner对象来读取用户输入,并指定正确的编码。例如:
Scanner scanner = new Scanner(System.in, "UTF-8");
这将确保控制台输入以UTF-8编码进行读取。
2、调整IDE或终端的编码设置: 如果您使用的是某个集成开发环境(IDE)或终端,您可以尝试调整其字符编码设置,确保输入和输出的字符编码一致。
3、使用InputStreamReader: 在Console类中,您可以使用InputStreamReader来将System.in的字节流转换为字符流,并使用正确的编码进行处理。例如:
InputStreamReader isr = new InputStreamReader(System.in, "UTF-8");
BufferedReader reader = new BufferedReader(isr);
String input = reader.readLine();
这样,您可以确保从控制台读取的字符被正确地解析为UTF-8编码。
确保在Console类和Add类之间的数据传递中,字符编码始终保持一致。这样可以避免字符乱码问题。如果问题仍然存在,您可能需要深入调查控制台输入和输出的编码设置以及数据传递的细节。