Java控制台输入中文的一种方法
发表于|更新于
|浏览量:
概述和代码
- 去年下半年,突然想要自己编写一个账本软件来记账。在编写过程中,我发现自己无法解决在控制台输入中文的问题,于是拜读了CSDN上几位博主的文章,获益匪浅,解决了中文输入的问题。今天向大家分享我的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| import java.util.*; import java.io.*; import java.nio.charset.Charset;
public class InterConsole { public static String readGBKLine(char regex) { List<Character> alist=new ArrayList<Character>(); InputStreamReader is=new InputStreamReader(System.in,Charset.forName("GBK")); try { int unicode=0; while(true) { unicode=is.read(); if(unicode==regex) break; else alist.add((char)unicode); } } catch(IOException e) {e.printStackTrace();} Character[] array1=alist.toArray(new Character[(alist.size())]); char[] array2=new char[array1.length]; for(int i=0;i<array1.length;i++) array2[i]=array1[i]; if(array2.length==0) return "空"; return new String(array2); } public static void sysOrder(String order) { try { new ProcessBuilder("cmd", "/c", order).inheritIO().start().waitFor(); } catch (InterruptedException | IOException e) { e.printStackTrace(); } } }
|
- 上面这段代码是一个叫作InterConsole的类,包含两个方法,第一个是中文输入方法readGBKLine(),第二个是在控制台调用一部分指令的方法sysOrder()。
解释代码
- 在readGBKLine()中,我创建了一个字符流,通过它来读取GBK格式的输入并将中文字符转化为unicode码。之后将unicode码转回字符形式存入队列,最终将队列转化为字符串。
- 在sysOrder()中,我使用了ProcessBuilder类的对象,说实话我并不明白这段代码的真实含义,因为这段代码来自站内很多篇关于使用清屏命令的博文,似乎是与创建新进程有关。不过虽然我不明白这段代码的原理,但它的确可以成功调用cmd的一部分命令,如颜色改变命令、清屏命令,以及临时改变cmd字符编码格式的chcp命令。
- 备注:在使用readGBKLine()之前,应当先通过批处理文件或者sysOrder()执行chcp 936命令,将控制台的编码格式改为gbk,否则会导致方法运行失败。
参考文章
在命令行模式、eclipse console下执行Java程序输入中文的几种情况尝试
java 在Cmd命令行实现清屏