Java-小技巧-002-String 转 long,进制转换

java

1.转化

  long l = Long.parseLong([String]);

  相当于 long l = Long.parseLong([String],10); 


  long l = Long.valueOf("123").longValue();

2.Long.ValueOf("String")与Long.parseLong("String")的区别

  Long.ValueOf("String")返回Long包装类型

  Long.parseLong("String")返回long基本数据类型

3.判断字符串是否是数值类型

  3.1 java 原声Character.isDigit方法使用

    /**

* JAVA自带的函数,缺点不能小数,负数,科学计数等含有非数字的

* @param str

* @return

*/

public static boolean isNumeric(String str) {

for (int i = 0; i < str.length(); i++) {

System.out.println(str.charAt(i));

if (!Character.isDigit(str.charAt(i))) {

return false;

}

}

return true;

}

  3.2 使用三方包org.apache.commons.lang

用法

     * StringUtils.isNumeric(null)   = false

* StringUtils.isNumeric("") = true

* StringUtils.isNumeric(" ") = false

* StringUtils.isNumeric("123") = true

* StringUtils.isNumeric("12 3") = false

* StringUtils.isNumeric("ab2c") = false

* StringUtils.isNumeric("12-3") = false

* StringUtils.isNumeric("12.3") = false

也不太理想

  3.3 正则表达式

    public static boolean isNumeric(String str) {

// 该正则表达式可以匹配所有的数字 包括负数

Pattern pattern = Pattern.compile("-?[0-9]+\\.?[0-9]*");

String bigStr;

try {

bigStr = new BigDecimal(str).toString();

} catch (Exception e) {

return false;// 异常 说明包含非数字。

}

Matcher isNum = pattern.matcher(bigStr); // matcher是全匹配

if (!isNum.matches()) {

return false;

}

return true;

}

在Java中将十进制转化成十六进制非常的简单。

int var = 324;

String hex = Integer.toHexString(var);

long lvar = 3243143432134L;

String lhex = Long.toHexString(lvar);

这样就可以得16进制的字符串了。当要从十六进制转化成十进制的时候也很方便:

Integer.parseInt(hex, 16);

Long.parseLong(hex, 16);

当int和long变量的值都是正数的时候,这样做一点问题都没问题,但当int和long变量的值为负数的时候,问题就出现了:

int var = -23243;

String hex = Integer.toHexString(var);

Integer.parseInt(hex, 16);

这时会报出Exception:

Exception in thread "main" java.lang.NumberFormatException: For input string: "ffffa535"

at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)

at java.lang.Integer.parseInt(Integer.java:459)

at demo.Main.main(Main.java:10)

这是为什么呢? 问题就在于Integer.parseInteger的时候,会将传入十六进制数字一致认为成正数,所以这时候表示负数的十六进制字符串所表示的数字就超出了Integer所能表示的数字范围,所以会报出NumberFormatException, 同时的问题也会现在Long.parseLong身上。

那么如何才解决这个问题呢?这时候的解决方案就是BigInteger.

BigInteger bi = new BigInteger(hex, 16);

通过BigInteger.intValue();和 BigInteger.longValue(); 得到你所需要的int或long型值。

以上是 Java-小技巧-002-String 转 long,进制转换 的全部内容, 来源链接: utcz.com/z/392319.html

回到顶部