如何在Java中将字符串转换为长整型?

470

我在Java中有一个简单的问题:如何将由Long.toString()获得的String转换为long类型?


1
以下是Java将字符串转换为长整型的5种方法及示例 - Somnath Muluk
请参考此链接:https://developer.android.com/reference/java/lang/Long.html#parseLong(java.lang.String,%20int) - Mihir Trivedi
10个回答

751

使用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

3
“午餐/晚餐”怎么样? - Narendra Sorathiya

151

要将一个字符串转换成一个 长整型(对象),使用 Long.valueOf(String s).longValue();

请参阅 链接


7
@Belgi。不,它返回java.lang.Long - Alexander Pogrebnyak
@Belgi - Long.valueOf 返回的是一个 Long 类型,而不是字符串。 - Don Roby
5
@MikeDaniels,这是一种非常间接的方法。请参见http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html#valueOf(java.lang.String),它返回一个 Long 对象 而不是原始的 long 类型。 - Pacerier
3
Long.valueOf(String s) 返回一个 Long 对象,而 Long.valueOf(String s).longValue() 返回一个 long 基本类型。 - Champ

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

   }
}

14

13

有几种方法可以将字符串转换为长整型:

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

8

最佳方法是使用Long.valueOf(str),因为它依赖于Long.valueOf(long),后者使用内部缓存使其更有效率,因为它将重用从-128127(包括这两个数)的Long实例。

返回表示指定长整型值的Long实例。如果不需要新的Long实例,通常应该优先使用此方法而不是构造函数Long(long),因为此方法通过缓存频繁请求的值可能会显著提高空间和时间性能。请注意,与Integer类中相应的方法不同,此方法不需要在特定范围内缓存值。

感谢自动拆箱,它允许将包装类的实例转换为其相应的基本类型,代码将会是这样:
long val = Long.valueOf(str);

请注意,如果提供的字符串与有符号长整型不匹配,则先前的代码仍可能抛出NumberFormatException。
一般来说,使用包装类(如Integer、Boolean、Long等)的静态工厂方法valueOf(str)是一个好习惯,因为它们中的大多数在可能的情况下重用实例,使它们在内存占用方面潜在地更加高效,而不是使用相应的parse方法或构造函数。

摘自Effective Java第一条,作者为Joshua Bloch

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


1
值得注意的是,自动拆箱由编译器转换为“解糖”,对于长-> 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")) - Ian Robertson

3

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

完成了!!!


1

首先,您需要检查要转换为Long的字符串不是null,并且确实是Long类型,以避免出现NumberFormatException异常。为此,最好创建一个新方法,如下所示:

    public static Long convertStringToLong(String str) {
        try {
            return Long.valueOf(str);
        } catch (NumberFormatException e) {
            return null;
        }
    }

1

对于那些转向 Kotlin 的人,只需使用
string.toLong()
这将在幕后调用Long.parseLong(string)


-1
如果您在不使用泛型的情况下使用Map,则需要将值转换为字符串,然后尝试转换为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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接