如何在Java中将String转换为long?
Posted
技术标签:
【中文标题】如何在Java中将String转换为long?【英文标题】:How to convert String to long in Java? 【发布时间】:2011-12-03 08:19:20 【问题描述】:我有一个简单的Java问题:如何将Long.toString()
获得的String
转换为long
?
【问题讨论】:
5 ways with examples 了解如何在 Java 中将字符串转换为长字符串 请参考这个:developer.android.com/reference/java/lang/… 【参考方案1】:使用Long.parseLong()
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
【讨论】:
“午餐/晚餐”怎么样?【参考方案2】:要将 String 转换为 Long(对象),请使用 Long.valueOf(String s).longValue();
见link
【讨论】:
这不是 OP 所要求的。 @Belgi。不,它返回java.lang.Long
@Belgi - Long.valueOf 返回一个 Long,而不是字符串。
@MikeDaniels,因为这是一种非常间接的方式。请参阅docs.oracle.com/javase/7/docs/api/java/lang/…,它返回一个 Long object 而不是原始 long。
Long.valueOf(String s) 给出 Long(对象), Long.valueOf(String s).longValue() 给出 long(原始)。【参考方案3】:
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());
【讨论】:
【参考方案4】:Long.valueOf(String s) - 显然,如果您的代码中可能出现非数字,则必须采取应有的谨慎措施。
【讨论】:
【参考方案5】:有几种方法可以将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.");
【讨论】:
【参考方案6】:最好的方法是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 -> Long,Long.valueOf(primitiveLong) 的情况,编译器将自动拆箱“脱糖”。所以Long number = Long.valueOf("123")
、Long number = Long.parseLong("123")
和Long number = Long.valueOf(Long.parseString("123")
最终都会做几乎相同的事情。您要做 需要注意的是不要调用盒装原始类的构造函数——这可能是一种浪费。所以不要写Long number = new Long(parseLong("123"))
【参考方案7】:
很简单,使用
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);
你已经完成了!!!
【讨论】:
【参考方案8】:对于那些改用 Kotlin 的人,只需使用string.toLong()
这将在后台调用Long.parseLong(string)
【讨论】:
【参考方案9】:如果您使用没有泛型的 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);
【讨论】:
以上是关于如何在Java中将String转换为long?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 应用程序中将 java lang long 转换为实体类
java中将一个double类型的数强制转换为long 型是四舍五入吗?