JAVA学习:将字符串转成数字
今天在面试时,面试官问的第一个问题就是如何将字符串转化成数字
我心想太简单了:用int 的封装类型对象Integer 中有一个parseInt()方法可将传入参数的字符串转换成数字 如下图
String str= "123456";
int num=Integer.parseInt(str);
System.out.println(num);
但是,面试官说不对,说要用String 的valueof()方法转成数字,回到学校亲自实践后了解 当我们的字符串为纯数字时才可以使用parseInt()方法解析,否则 当字符串中含有除数字以外的字符时 会报数字格式化异常:
String str= "abc123456";
int num=Integer.parseInt(str);
System.out.println(num);
尝试使用integer 的valueof方法将字符串转换成数字
public class FindAllNum {
public static void main(String[] args) {
String aaa="12141";
int a=Integer.valueOf(aaa);
System.out.println(a);
}
}
尝试当字符串中含有其他类型字符时,再次尝试取出数字,发现依然会爆出异常
public class FindAllNum {
public static void main(String[] args) {
String str= "a1v2b3s45w6";
// String aaa="12141";
int a=Integer.valueOf(str);
System.out.println(a);
}
}
尝试使用Integer 的valueof ()方法 也可以取出字符中的数值,但是与parseInt 功能类似,当出现字符串时都会报出数字格式化异常,不同的时valueof 返回的时int的封装类型对象, 而parseInt返回的时int 基本数据类型
通过学习,还可以通过正则表达式的方式匹配出数字的字符 代码实现如图所示
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FindAllNum {
public static void main(String[] args) {
String str= " asdasd1,040.001";
char[] chars = str.toCharArray();
// 匹配格式
String regex="\\d+(\\.\\d+)?";
//正则表达是编译表示
Pattern p=Pattern.compile(regex);
// 创建匹配器
Matcher matcher=p.matcher(str);
StringBuffer num = new StringBuffer();
while (matcher.find()){
num.append((String) matcher.group());
}
String num_str = num.toString();
Float value = Float.valueOf(num_str);
System.out.println(value);
}
}
结论 无论通过使用Intger 的parseInt()方法还是valueof 都可以将字符串转成数字转成数字,因此我的回答应该没有错误,希望以后在面试时能自信一点。