原谅我的山顶洞人的方法
public int StrToInt(String str) {
if(str == null || str.equals("0") || "".equals(str)){
return 0;
}
char [] strs = str.toCharArray();
int n = strs.length;
if(strs.length == 11 || strs.length == 10){
if(!specialJudge(str)){
return 0;
}
}
for(int i=0;i<n;i++){
if(!judge(strs[i],i)){
return 0;
}
}
if(strs[0]=='-'){
return -caculate(str);
}else{
return caculate(str);
}
}
private boolean specialJudge(String str) {
boolean flag = true;
char [] cs;
if(str.startsWith("-")){
flag = false;
cs = str.substring(1,str.length()).toCharArray();
}else if(str.startsWith("+")){
cs = str.substring(1,str.length()).toCharArray();
}else{
cs = str.toCharArray();
}
for (int i = 0; i < cs.length; i++) {
if (i == 0) {
if (cs[i] > '2') {
return false;
}
} else if (i == 1) {
if (cs[i] > '1') {
return false;
}
} else if (i == 2) {
if (cs[i] > '4') {
return false;
}
} else if (i == 3) {
if (cs[i] > '7') {
return false;
}
} else if (i == 4) {
if (cs[i] > '4') {
return false;
}
} else if (i == 5) {
if (cs[i] > '8') {
return false;
}
} else if (i == 6) {
if (cs[i] > '3') {
return false;
}
} else if (i == 7) {
if (cs[i] > '6') {
return false;
}
} else if (i == 8) {
if (cs[i] > '4') {
return false;
}
} else if (i == 9) {
if (flag) {
if (cs[i] > '7') {
return false;
}
} else {
if (cs[i] > '8') {
return false;
}
}
}
}
return true;
}
private int caculate(String str) {
char [] strs = str.toCharArray();
if(str.startsWith("+") || str.startsWith("-")){
strs = str.substring(1, str.length()).toCharArray();
}
int sum = 0;
switch (strs.length) {
case 10:
for(int i=0;i<strs.length;i++){
sum+=transfer(strs[i])*base(strs.length-i);
}
break;
case 9:
for(int i=0;i<strs.length;i++){
sum+=transfer(strs[i])*base(strs.length-i);
}
break;
case 8:
for(int i=0;i<strs.length;i++){
sum+=transfer(strs[i])*base(strs.length-i);
}
break;
case 7:
for(int i=0;i<strs.length;i++){
sum+=transfer(strs[i])*base(strs.length-i);
}
break;
case 6:
for(int i=0;i<strs.length;i++){
sum+=transfer(strs[i])*base(strs.length-i);
}
break;
case 5:
for(int i=0;i<strs.length;i++){
sum+=transfer(strs[i])*base(strs.length-i);
}
break;
case 4:
for(int i=0;i<strs.length;i++){
sum+=transfer(strs[i])*base(strs.length-i);
}
break;
case 3:
for(int i=0;i<strs.length;i++){
sum+=transfer(strs[i])*base(strs.length-i);
}
break;
case 2:
for(int i=0;i<strs.length;i++){
sum+=transfer(strs[i])*base(strs.length-i);
}
break;
case 1:
for(int i=0;i<strs.length;i++){
sum+=transfer(strs[i])*base(strs.length-i);
}
break;
default:
break;
}
return sum;
}
private int transfer(char ch){
if(ch == '0'){
return 0;
}else if(ch =='1'){
return 1;
}else if(ch =='2'){
return 2;
}else if(ch =='3'){
return 3;
}else if(ch =='4'){
return 4;
}else if(ch =='5'){
return 5;
}else if(ch =='6'){
return 6;
}else if(ch =='7'){
return 7;
}else if(ch =='8'){
return 8;
}else{
return 9;
}
}
private int base(int i) {
if(i==10){
return 1000000000;
}else if(i==9){
return 100000000;
}else if(i==8){
return 10000000;
}else if(i==7){
return 1000000;
}else if(i==6){
return 100000;
}else if(i==5){
return 10000;
}else if(i==4){
return 1000;
}else if(i==3){
return 100;
}else if(i==2){
return 10;
}else{
return 1;
}
}
// 可以使用ASCII字符表一个判断结束,但是一般会忘记字符对应ascii可显示数值,所以直接普判
private boolean judge(char c,int index) {
if((c == '+' && index==0)||(c == '-' && index==0) || c=='1' || c=='2' || c=='3' || c=='4'|| c=='5'|| c=='6'|| c=='7'|| c=='8'|| c=='9'|| c=='0'){
return true;
}else{
return false;
}
}