如何在Java中将String转换为long?


Answers:


664

采用 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
那“午餐/晚餐”呢?
Narendra Sorathiya

漂亮的代码。它的工作
sirmagid

140

于转换字符串(对象),使用Long.valueOf(String s).longValue();

链接


1
这不是OP的要求。
克里斯蒂安·曼

7
@贝尔吉 不,它返回java.lang.Long
亚历山大Pogrebnyak

@Belgi-Long.valueOf返回Long,而不是字符串。
唐·罗比

4
@MikeDaniels,因为这是一种非常间接的方式。请参阅docs.oracle.com/javase/7/docs/api/java/lang/…,它返回Long 对象,而不是原始long 对象
Pacerier 2014年

Long.valueOf(String s)给出Long(对象),而Long.valueOf(String s).longValue()给出long(原始)。
2016年

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());
      }

   }
}


5

最好的方法是Long.valueOf(str),它依赖于Long.valueOf(long)使用内部缓存的缓存,因此效率更高,因为如果需要,它将重用Long-128到的缓存实例127

返回Long表示指定long值的实例。如果不需要新的Long实例,则通常应优先于构造方法使用Long(long)此方法,因为此方法通过缓存经常请求的值可能会产生明显更好的空间和时间性能。请注意,与Integer类中的相应方法不同,不需要此方法来缓存特定范围内的值。

由于自动拆箱允许将包装器类的实例转换为其相应的原始类型,因此代码如下:

long val = Long.valueOf(str);

请注意,NumberFormatException如果提供的代码String与带符号的不匹配,则先前的代码仍会引发long

一般来说,这是一个很好的做法,使用static工厂方法valueOf(str)的包装类等IntegerBooleanLong,...因为他们大多数情况下,重复使用,只要有可能使他们更可能在内存占用一届比相应的有效的parse方法或构造函数。


摘自Joshua Bloch撰写的Effective JavaItem 1

您通常可以通过使用静态工厂方法(第1项)来避免创建不必要的对象,而不是使用提供两种方法的不可变类上的构造函数。例如,静态工厂方法Boolean.valueOf(String)几乎总是比构造方法 更可取Boolean(String)。构造函数在每次调用时都会创建一个新对象,而静态工厂方法从来不需要这样做,实际上也不会这样做。


1
值得注意的是,对于long-> Long,Long.valueOf(primitiveLong),编译器将自动拆箱变成“ desugared”。所以 Long number = Long.valueOf("123")Long number = Long.parseLong("123")Long number = Long.valueOf(Long.parseString("123")所有最终做几乎同样的事情。您要做的是小心不要调用盒装基本类的构造函数-这可能很浪费。所以不要写Long number = new Long(parseLong("123"))
Ian Robertson

4

有一些方法可以将字符串转换为Integer

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) 使用十进制格式:

    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.");
   }

1

很简单,使用 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);

你完成了!!!


0

对于那些切换到Kotlin的人,只需使用
string.toLong()
That将Long.parseLong(string)在后台调用


-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);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.