自己编写的程序:(不考虑double溢出)
(1)考虑正负情况
(2)考虑小数点数目多余1个的情况
(3)考虑非数字情况
//字符 ASCII:. 46 - 45 a-z 97-122 A-Z 65-90 0-9 48-57
class StringtoDouble{
public static void main(String[] args) {
String str1 = "-1123.45";
if(JudgeStringtoDouble(str1))
System.out.println(Stringtodouble(str1));
else
System.out.println(0);
}
private static boolean JudgeStringtoDouble(String str){
int i = 0 , j = 0;
if((str.charAt(i)) == 45)
i++;
for(; i < str.length(); i++)
{
char one = (str.charAt(i));
if(one >= 48 && one <= 57)
;
else
if (one == 46)
j++;
else
return false;
}
if(j == 1 || j == 0)
return true;
else
return false;
}
private static double Stringtodouble(String str){
int i = 0, sign;
double integer = 0;
double decimal = 0;
int dot = str.length();//字符串长度
if((str.charAt(i)) == 45)
{
sign = -1;
i++;
}
else
sign = 1;
for(;i < str.length(); i++)
{
char one = (str.charAt(i));
if(one >= 48 && one <= 57)
if(i < dot)
integer = (one - 48) + integer * 10;
else
decimal = decimal + (one - 48) / Math.pow(10, i - dot);
else
if(one == 46)
dot = i;
}
return sign * (integer + decimal);
}
}
备注:不管语言,String底层是以char型数组实现
在java中String和char数组转换:
(1)String类的toCharArray()方法,将字符串转换为字符数组
(2)String类的valueOf()方法,将char类型的数组转换为字符串