【发布时间】:2011-12-03 08:19:20
【问题描述】:
我有一个简单的Java问题:如何将Long.toString()获得的String转换为long?
【问题讨论】:
-
5 ways with examples 了解如何在 Java 中将字符串转换为长字符串
我有一个简单的Java问题:如何将Long.toString()获得的String转换为long?
【问题讨论】:
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
【讨论】:
要将 String 转换为 Long(对象),请使用 Long.valueOf(String s).longValue();
见link
【讨论】:
java.lang.Long
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());
}
}
}
【讨论】:
Long.valueOf(String s) - 显然,如果您的代码中可能出现非数字,则必须采取应有的谨慎措施。
【讨论】:
有几种方法可以将String 转换为long:
1)
long l = Long.parseLong("200");
String numberAsString = "1234";
long number = Long.valueOf(numberAsString).longValue();
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();
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.");
}
【讨论】:
最好的方法是Long.valueOf(str),因为它依赖于Long.valueOf(long),它使用内部缓存使其更高效,因为它会在需要时重用Long 的缓存实例,包括从-128 到127。
返回一个代表指定 long 值的
Long实例。如果一个 new Long 实例不是必须的,这个方法一般应该是 优先使用构造函数Long(long),因为这种方法是 可能会产生显着更好的空间和时间性能 缓存经常请求的值。请注意,与 Integer类中对应的方法,这个方法不是必须的 缓存特定范围内的值。
感谢auto-unboxing 允许将包装类的实例转换为其对应的原始类型,代码如下:
long val = Long.valueOf(str);
请注意,如果提供的String 与签名的long 不匹配,则之前的代码仍然可以抛出NumberFormatException。
一般来说,使用 Integer、Boolean、Long 等包装器类的 static 工厂方法 valueOf(str) 是一种很好的做法,因为它们中的大多数都会在任何时候重用实例有可能使它们在内存占用方面比相应的parse 方法或构造函数更有效。
摘自Joshua Bloch撰写的Effective JavaItem 1:
您通常可以通过使用 static 来避免创建不必要的对象 工厂方法(第 1 项)优先于不可变的构造函数 提供两者的类。比如静态工厂方法
Boolean.valueOf(String)几乎总是比 构造函数Boolean(String)。构造函数创建一个新对象 每次调用它,而静态工厂方法永远不会 必须这样做,但实际上不会这样做。
【讨论】:
Long number = Long.valueOf("123")、Long number = Long.parseLong("123") 和Long number = Long.valueOf(Long.parseString("123") 最终都会做几乎相同的事情。您要做 需要注意的是不要调用盒装原始类的构造函数——这可能是一种浪费。所以不要写Long number = new Long(parseLong("123"))
很简单,使用
Long.valueOf(String s);
例如:
String s;
long l;
Scanner sc=new Scanner(System.in);
s=sc.next();
l=Long.valueOf(s);
System.out.print(l);
你已经完成了!!!
【讨论】:
对于那些改用 Kotlin 的人,只需使用string.toLong()
这将在后台调用Long.parseLong(string)
【讨论】:
如果您使用没有泛型的 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);
【讨论】: