我在Java中遇到一个简单的问题:如何将String
获得的Long.toString()
转换为long
?
答案 0 :(得分:629)
Long.parseLong("0", 10) // returns 0L
Long.parseLong("473", 10) // returns 473L
Long.parseLong("-0", 10) // returns 0L
Long.parseLong("-FF", 16) // returns -255L
Long.parseLong("1100110", 2) // returns 102L
Long.parseLong("99", 8) // throws a NumberFormatException
Long.parseLong("Hazelnut", 10) // throws a NumberFormatException
Long.parseLong("Hazelnut", 36) // returns 1356099454469L
Long.parseLong("999") // returns 999L
答案 1 :(得分:136)
要将字符串转换为长(对象),请使用Long.valueOf(String s).longValue();
请参阅link
答案 2 :(得分:27)
public class StringToLong {
public static void main (String[] args) {
// String s = "fred"; // do this if you want an exception
String s = "100";
try {
long l = Long.parseLong(s);
System.out.println("long l = " + l);
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException: " + nfe.getMessage());
}
}
}
答案 3 :(得分:11)
Long.valueOf(String s) - 显然,如果您的代码可以使用非数字,则必须小心谨慎。
答案 4 :(得分:4)
最好的方法是Long.valueOf(str)
,因为它依赖于Long.valueOf(long)
,它使用内部缓存使其更有效,因为如果需要,Long
的缓存实例将从{{1}重用包含-128
的内容。
返回表示指定long值的
127
实例。如果一个 新的Long实例不是必需的,这个方法一般应该是 优先使用构造函数Long
,因为这个方法是 可能会产生明显更好的空间和时间表现 缓存频繁请求的值。注意,不像 在Integer类中对应的方法,不需要此方法 缓存特定范围内的值。
感谢auto-unboxing允许将包装类的实例转换为其对应的基本类型,代码将是:
Long(long)
请注意,如果提供的long val = Long.valueOf(str);
与签名的NumberFormatException
不匹配,则之前的代码仍可以String
。
一般来说,最好使用long
,static
,valueOf(str)
等包装类的Integer
工厂方法Boolean
。 ..因为只要有可能使它们在内存占用方面比相应的Long
方法或构造函数更有效,它们中的大多数都会重用实例。
Joshua Bloch撰写的Effective Java parse
摘录:
您通常可以使用 static来避免创建不必要的对象 工厂方法(第1项)优先于不可变的构造函数 提供两者的类。例如,静态工厂方法
Item 1
几乎总是优先于 构造函数Boolean.valueOf(String)
。构造函数创建一个新对象 每次调用它时,静态工厂方法永远不会 要求这样做,而不是在实践中。
答案 5 :(得分:0)
对于那些换到Kotlin的人,只需使用
string.toLong()
这将在引擎盖下呼叫Long.parseLong(string)
答案 6 :(得分:0)
有一些方法可以将字符串转换为整数:
1)
long l = Long.parseLong("200");
2)
String numberAsString = "1234";
long number = Long.valueOf(numberAsString).longValue();
3)
String numberAsString = "1234";
Long longObject = new Long(numberAsString);
long number = longObject.longValue();
我们可以缩短为:
String numberAsString = "1234";
long number = new Long(numberAsString).longValue();
或者只是
long number = new Long("1234").longValue();
4)使用Decemal格式:
String numberAsString = "1234";
DecimalFormat decimalFormat = new DecimalFormat("#");
try {
long number = decimalFormat.parse(numberAsString).longValue();
System.out.println("The number is: " + number);
} catch (ParseException e) {
System.out.println(numberAsString + " is not a valid number.");
}
答案 7 :(得分:-1)
如果你使用带有泛型的Map,那么你需要将值转换为String然后尝试转换为Long。以下是示例代码
Map map = new HashMap();
map.put("name", "John");
map.put("time", "9648512236521");
map.put("age", "25");
long time = Long.valueOf((String)map.get("time")).longValue() ;
int age = Integer.valueOf((String) map.get("aget")).intValue();
System.out.println(time);
System.out.println(age);