Java控制台输入中文的一种方法

 概述和代码

        去年下半年,突然想要自己编写一个账本软件来记账。在编写过程中,我发现自己无法解决在控制台输入中文的问题,于是拜读了CSDN上几位博主的文章,获益匪浅,解决了中文输入的问题。今天向大家分享我的代码。

import java.util.*;
import java.io.*;
import java.nio.charset.Charset;

public class InterConsole 
{
	//从控制台读取GBK格式中文字符串的方法
	//参数为输入停止条件,比如'\r',或者' '
	public static String readGBKLine(char regex)
	{
		//创建字符列表
		List<Character> alist=new ArrayList<Character>();
		//创建Reader流
		InputStreamReader is=new InputStreamReader(System.in,Charset.forName("GBK"));
		try
		{
			//声明暂存字符unicode值的变量
			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);
	}
	//cmd系统指令方法
	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命令行实现清屏

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值