JAVA学习:将字符串转成数字

今天在面试时,面试官问的第一个问题就是如何将字符串转化成数字

我心想太简单了:用int 的封装类型对象Integer 中有一个parseInt()方法可将传入参数的字符串转换成数字 如下图

        String str= "123456";
        int num=Integer.parseInt(str);
        System.out.println(num);

JAVA学习:将字符串转成数字_第1张图片

但是,面试官说不对,说要用String 的valueof()方法转成数字,回到学校亲自实践后了解 当我们的字符串为纯数字时才可以使用parseInt()方法解析,否则  当字符串中含有除数字以外的字符时 会报数字格式化异常:

        String str= "abc123456";
        int num=Integer.parseInt(str);
        System.out.println(num);

JAVA学习:将字符串转成数字_第2张图片

尝试使用integer 的valueof方法将字符串转换成数字 


public class FindAllNum {
    public static void main(String[] args) {
        String aaa="12141";
        int a=Integer.valueOf(aaa);

        System.out.println(a);

    }
}

JAVA学习:将字符串转成数字_第3张图片

尝试当字符串中含有其他类型字符时,再次尝试取出数字,发现依然会爆出异常


public class FindAllNum {
    public static void main(String[] args) {
        String str= "a1v2b3s45w6";
  //      String aaa="12141";
        int a=Integer.valueOf(str);

        System.out.println(a);

    }
}

JAVA学习:将字符串转成数字_第4张图片

尝试使用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);

    }
}

JAVA学习:将字符串转成数字_第5张图片

结论 无论通过使用Intger 的parseInt()方法还是valueof 都可以将字符串转成数字转成数字,因此我的回答应该没有错误,希望以后在面试时能自信一点。

你可能感兴趣的:(java,面试)