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

Bel*_*lgi 387 java string

我在Java中得到了一个简单的问题:我如何将String获得的转换Long.toString()long

Mik*_*sen 639

使用 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
Run Code Online (Sandbox Code Playgroud)

  • http://www.coderanch.com/t/394194/java/java/parseLong-String-int-radix-radix (7认同)
  • “午餐/晚餐”怎么样? (3认同)

小智 138

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

链接

  • 我不明白为什么这会被贬低.这没错. (7认同)
  • @Belgi.不,它返回`java.lang.Long` (7认同)
  • @MikeDaniels,因为这是一种非常间接的方式.请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#valueOf(java.lang.String),它返回Long**对象**而不是原始long. (4认同)
  • Long.valueOf(String s) 给出一个 Long (对象),而 Long.valueOf(String s).longValue() 给出 long (基元)。 (3认同)

Gen*_*uro 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());
      }

   }
}
Run Code Online (Sandbox Code Playgroud)


mar*_*ers 11

Long.valueOf(String s) - 显然,如果代码中有可能,则必须注意防止非数字.

  • 注意:此方法不返回`long`而是`Long`对象 (5认同)

Hoq*_*dul 6

有几种方法可以转换Stringlong

1)

long l = Long.parseLong("200"); 
Run Code Online (Sandbox Code Playgroud)
String numberAsString = "1234";
long number = Long.valueOf(numberAsString).longValue();
Run Code Online (Sandbox Code Playgroud)
String numberAsString = "1234";
Long longObject = new Long(numberAsString);
long number = longObject.longValue();
Run Code Online (Sandbox Code Playgroud)

我们可以缩短为:

String numberAsString = "1234";
long number = new Long(numberAsString).longValue();
Run Code Online (Sandbox Code Playgroud)

要不就

long number = new Long("1234").longValue();
Run Code Online (Sandbox Code Playgroud)
  1. 使用十进制格式:
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.");
}
Run Code Online (Sandbox Code Playgroud)


Nic*_*tto 5

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

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

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

long val = Long.valueOf(str);
Run Code Online (Sandbox Code Playgroud)

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

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


摘自Joshua Bloch撰写的Effective JavaItem 1

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