首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

将输入的字符串翻译成中文,小疑点

2012-12-15 
将输入的字符串翻译成中文,小问题!package com.contestimport java.util.HashMapimport java.util.Mapp

将输入的字符串翻译成中文,小问题!
package com.contest;

import java.util.HashMap;
import java.util.Map;

public class Contest01 {

private static int realLength = 0; // 存储数字的真实位数。
private static Map<String, String> map = new HashMap<String, String>(); // 将
// 1~9
// 分别翻译成中文.

/**
 * @param args
 */
public static void main(String[] args) {
int counttemp = 0;
String read = args[0];
for (int i = 0; i < read.length(); i++) {
if ("0".equals(read.substring(i, i + 1))) {
counttemp++;
} else {
break;
}
}

realLength = read.length() - counttemp; // 这里注意
String realString = read.substring(counttemp); // 获得真实字符串
System.out.println("readResult:" + realString);
System.out.println(realLength);
map.put("0", "零");
map.put("1", "一");
map.put("2", "二");
map.put("3", "三");
map.put("4", "四");
map.put("5", "五");
map.put("6", "六");
map.put("7", "七");
map.put("8", "八");
map.put("9", "九");
String str = readResult(realString, realLength);
System.out.println(str);
System.out.println(realString.length());

}

// 定义方法翻译字符串
private static String readResult(String realString, int len) {
String s = ""; // 存储返回的字符串
switch (len) {
case 0: // 位数都为 0 的情况
s = map.get("0");
break;
case 1:
s = map.get(realString.substring(0));
break;
case 2: // 有问题
if (countZero(realString) == 1) { // 有位数为零的情况
if (map.get(realString).substring(0, 1).equals("1")) { // 十位为
// “1”
s = "十";
} else { // 十位不为 ”1“
s = map.get(realString.substring(0, 1)) + "十";
}

} else { // 没有位数为 零的情况
if (map.get(realString).substring(0, 1).equals("1")) { // 十位为
// “1”
s = "十" + map.get(realString.substring(1));
} else { // 十位不为 ”1“
s = map.get(realString.substring(0, 1)) + "十"
+ map.get(realString.substring(1));
}

}
break;
case 3:
if (countZero(realString) == 0) { // 没有位数为 0
s = map.get(realString.substring(0, 1)) + "百"
+ map.get(realString.substring(1, 2)) + "十"
+ map.get(realString.substring(2));
} else if (countZero(realString) == 1) { // 有一位为 0
if (checkZero(realString, 1)) { // 十位为 0
s = map.get(realString.substring(0, 1)) + "百" + "零"
+ map.get(realString.substring(2));
} else { // 各位为 0
System.out.println("Here");
s = map.get(realString.substring(0, 1)) + "百"
+ map.get(realString.substring(1, 2)) + "十";
}
} else { // 有两位为 0


s = map.get(realString.substring(0, 1)) + "百";
}
break;
case 4:
if (countZero(realString) == 0) { // 没有位数为 0
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百"
+ map.get(realString.substring(2, 3)) + "十"
+ map.get(realString.substring(3));
} else if (countZero(realString) == 1) {
if (checkZero(realString, 1)) {
s = map.get(realString.substring(0, 1)) + "千" + "零"
+ map.get(realString.substring(2, 3)) + "十"
+ map.get(realString.substring(3));
} else if (checkZero(realString, 2)) {
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百" + "零"
+ map.get(realString.substring(3));
} else {
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百"
+ map.get(realString.substring(2, 3)) + "十";
}
} else if (countZero(realString) == 2) {
if (checkZero(realString, 1) && checkZero(realString, 2)) { // 百位和十位为
// 0
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(2, 3))
+ map.get(realString.substring(3));
} else if (checkZero(realString, 1) && checkZero(realString, 3)) { // 百位和个位为
s = map.get(realString.substring(0, 1))
+ "千" // 0
+ map.get(realString.substring(1, 2))
+ map.get(realString.substring(2, 3)) + "十";

} else { // 十位和各位为零
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百";
}
} else { // 三位数为 0
s = map.get(realString.substring(0, 1)) + "千";
}
break;
case 5:
if (countZero(realString) == 0) { // 没有位数为 0
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百"
+ map.get(realString.substring(2, 3)) + "十"
+ map.get(realString.substring(3));
} else if (countZero(realString) == 1) {
if (checkZero(realString, 1)) {
s = map.get(realString.substring(0, 1)) + "千" + "零"
+ map.get(realString.substring(2, 3)) + "十"
+ map.get(realString.substring(3));
} else if (checkZero(realString, 2)) {
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百" + "零"
+ map.get(realString.substring(3));
} else {
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百"
+ map.get(realString.substring(2, 3)) + "十";
}
} else if (countZero(realString) == 2) {
if (checkZero(realString, 1) && checkZero(realString, 2)) { // 百位和十位为


// 0
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(2, 3))
+ map.get(realString.substring(3));
} else if (checkZero(realString, 1) && checkZero(realString, 3)) { // 百位和个位为
s = map.get(realString.substring(0, 1))
+ "千" // 0
+ map.get(realString.substring(1, 2))
+ map.get(realString.substring(2, 3)) + "十";

} else { // 十位和各位为零
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百";
}
} else { // 三位数为 0
s = map.get(realString.substring(0, 1)) + "千";
}
break;
case 6:

break;
case 7:

break;
case 8:

break;
case 9:

break;

default:
break;
}
return s;
}

// 定义方法检查某下标的元素是否为 “0”
public static boolean checkZero(String real, int index) {
if ("0".equals(real.substring(index, index + 1))) {
return true;
} else {
return false;
}
}

// 定义方法计算 0 的个数
public static int countZero(String realString) {
int count = 0;
for (int i = 0; i < realString.length(); i++) {
if (realString.charAt(i) == '0') {
count++;
}
}
return count;
}

}

问:问题出现在 两位数“case 2 ”那里,
空指针异常!
但是 case 2 的代码及其相关的方法我试试了,都没有问题,但是始终找不到那里有错:
补充:
0001 、1001 、1100 我输入的都很成功,但是到 0010 的时候就出现上述我说的情况了···真心找不到错误!!求帮忙!!


[最优解释]
改一下可以:


//if (map.get(realString).substring(0, 1).equals("1")) { // 十位为
if (map.get(realString.substring(0, 1)).equals("1")) { // 十位为 注意括号

[其他解释]
对了,谢谢哦,我还一直找不到哪里有错了呢···,分全部给你了····

热点排行