日期:2014-05-20 浏览次数:21021 次
import java.util.HashMap;
public class Test {
static HashMap<String, Integer> numMap = new HashMap<String, Integer>();
static HashMap<String, Long> unitMap = new HashMap<String, Long>();
private static void init(){
numMap.put("one", 1);
numMap.put("two", 2);
numMap.put("three", 3);
numMap.put("four", 4);
numMap.put("five", 5);
numMap.put("six", 6);
numMap.put("seven", 7);
numMap.put("eight", 8);
numMap.put("nine", 9);
numMap.put("ten", 10);
numMap.put("eleven", 11);
numMap.put("twelve", 12);
numMap.put("thirteen", 13);
numMap.put("fourteen", 14);
numMap.put("fifteen", 15);
numMap.put("sixteen", 16);
numMap.put("seventeen", 17);
numMap.put("eighteen", 18);
numMap.put("nineteen", 19);
numMap.put("twenty", 20);
numMap.put("thirty", 30);
numMap.put("forty", 40);
numMap.put("fifty", 50);
numMap.put("sixty", 60);
numMap.put("seventy", 70);
numMap.put("eighty", 80);
numMap.put("ninety", 90);
unitMap.put("hundred", 100L);
unitMap.put("thousand", 1000L);
unitMap.put("million", 1000000L);
unitMap.put("billion", 1000000000L);
}
public static void main(String[] args) {
init();
//121,942,005,731
String string = "one hundred and twenty-one billion nine hundred and forty-two million five " +
"thousand seven hundred and thirty one";
long num = getNum(string);
System.out.println(Long.valueOf(String.valueOf(num)));
//格式化
System.out.println(formatNum(num));
}
static long getNum(String string){
final String ignoreString = "and";
string = string.trim();
string = string.replaceAll("-", " ");
String[] strings = string.split(" ");
long unit = 0;
long sub = 0,sum = 0;
for(int i = 0;i < strings.length;i++){
if(unitMap.containsKey(strings[i])){
if(strings[i].equals("hundred") && checkHundred(strings, i)){
sub *= unitMap.get(strings[i]);
}else{
unit = unitMap.get(strings[i]);
sum += sub * unit;
sub = 0;
}
}
else if (numMap.containsKey(strings[i])) {
sub += numMap.get(strings[i]);
}
else if (strings[i].equals(ignoreString)) {
continue;
}
else {
System.out.println("error!");
return Integer.MIN_VALUE;
}
}
sum += sub;
return sum;
}
static boolean checkHundred(String[] strings,int index){
for(int i = index + 1;i < strings.length;i++){
if(strings[i].endsWith("hundred")){
return true;
}
}
return false;
}
static String formatNum(long num){
StringBuffer sb = new StringBuffer(String.valueOf(num));
StringBuffer result = new StringBuffer();
int count = 0;
for(int i = sb.length() - 1;i >= 0;i--){
result.append(sb.charAt(i));
++count;
if(count % 3 == 0 && i != 0){
result.append(",");
}
}
return result.reverse().toString();
}
}