一个能从命令行输入语句,并将所输入的数字大写返回的小代码(其实就是圣*园的一次竞赛的题目之一啦)
使用BigDemical类可以将String类型的字符串数字前面的零去掉
基于第一次做的小东西,特此在此留作纪念
<span style="background-color: rgb(255, 255, 51);">import java.io.*;
import java.math.BigDecimal;
public class Contest1
{
public static void main(String[] args) throws IOException
{
final char[] NUM_CHAR = "零一二三四五六七八九".toCharArray();
final String[] IN_UNIT_CHAR = {"", "十", "百", "千"};
//此为段内标识数组
final String[] UNIT_NAME = {"", "万"};
//此为段位标识数组
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
//可以接收到命令行输入的字符串
System.out.println("请输入8位数字");
String s = br.readLine();
if (s.length() > 8)
{
System.out.println("最多只能输入8位数字");
System.exit(0);
}
char[] ch = s.toCharArray();//将输入的字符串转换成char数组
try //判断输入的内容是否为全为数字
{
for (char c : ch)
{
String a = c + "";
Integer.parseInt(a);
}
}
catch (Exception e)
{
System.out.println("用户输入的字符不都为数字,无法转换");
}
String str = new BigDecimal(s).toString();
//将输入的字符串转换为前端没有零的字符串
ch = str.toCharArray();
StringBuilder result = new StringBuilder();
int zeroNum = 0; //连续零的个数
for (int i = 0; i < ch.length; i++)
{
int index = (ch.length - i - 1) % 4;
//取值段内位置,介于3、2、1、0;
//每个段内都是有""、"十"、"百"、"千"组成
int indexLoc = (ch.length - i - 1) / 4;
//取段位置,介于1、0;
//由于最高只能输入8个字符,因此最高为万位。
//所以只存在""与"万"两种段
//下面if...else语句为添加段内数和标识
if (ch[i] == '0')
{
zeroNum++;
}
else
{
if (zeroNum != 0)
{
if (index != 3)
{
result.append("零");
}
zeroNum = 0;
}
result.append(NUM_CHAR[ch[i] - '0']);
//转换该位置的数
result.append(IN_UNIT_CHAR[index]);
//添加段内标识
}
//下面是添加段位标识
if (index == 0 && zeroNum < 4)
{
result.append(UNIT_NAME[indexLoc]);
}
}
System.out.println(result);
}
}</span>