此时不允许使用java提供的方法,那么就需要使用Unicode编码,由表可以知道,整型1和字符’1’相差48
再有需要考虑的情况是字符串中有一些其他的字符,因此需要获取字符串中的数字,再进行相应位数的运算
private static int getBit(char[] arr){//获取数字的位数
int count=0;
for(int i=0;i<arr.length;i++){
if(arr[i]>='0'&&arr[i]<='9'){
count++;
}
}
return count;
}
public static int stringToInt(char[] arr){//字符串转整型
int sum=0;//获取最后的结果
int count=0;
int bit=getBit(arr);
for(int i=0;i<arr.length;i++){
if (arr[i] >= '0' && arr[i]<='9') {
arr[i]-='0';//arr[i]-=48;//根据Unicode编码
sum+=(Math.pow(10,bit-1-count))*arr[i];//每一位数字对应的位数进行运算并相加
count++;
}
}
for(int i=0;i<arr.length;i++){//如果有负号进行的操作
if(arr[i]=='-'){
sum*=(-1);
}
}
return sum;
}
public static void main(String[] args) {//进行测试
System.out.print("请输入一个字符串:");
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
char[] arr = str.toCharArray();
System.out.println(stringToInt(arr));
}
测试一
测试二
这里说一下调试过程中遇到的问题,在主函数中直接给定字符串和输入一个字符串出来的结果不同,后来才知道,原来学的输入一个字符串是 scanner.next(),但是如果测试时候字符串中有空格结果就不对了,这里要写scanner.nextLine(),区别是next方法是以空格或者回车分割,而nextLine只以回车键分割