把一个汉字转化为对应的阿拉伯数字,代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Main m=new Main();
System.out.println(m.toNumber("四亿七百六十万五千四百零九"));
}
HashMap<Character,Integer> number=new HashMap<>(){{
put('一',1);
put('二',2);
put('三',3);
put('四',4);
put('五',5);
put('六',6);
put('七',7);
put('八',8);
put('九',9);
}};
HashMap<Character,Integer> digit=new HashMap<>(){{
put('十',10);
put('百',100);
put('千',1000);
put('万',10000);
put('亿',100000000);
}};
List<Integer> temp=new ArrayList<>();
public int toNumber(String str){
boolean ok=process(str);
int res=0;
if(ok){
for(int i:temp){
res+=i;
}
}
return res;
}
public boolean process(String input){
if(input.equals(""))
return true;
else if(digit.containsKey(input.charAt(0))){
if(temp.size()==0 || temp.get(temp.size()-1) >= digit.get(input.charAt(0))){
return false;
}
int cur=0;
while(temp.size()>=1 && temp.get(temp.size()-1) < digit.get(input.charAt(0))){
cur+=temp.get(temp.size()-1);
temp.remove(temp.size()-1);
}
temp.add(cur*digit.get(input.charAt(0)));
return process(input.substring(1));
}else if(number.containsKey(input.charAt(0))){
temp.add(number.get(input.charAt(0)));
return process(input.substring(1));
}else if(input.charAt(0)=='零'){
return process(input.substring(1));
}else{
return false;
}
}
}