【问题标题】:How to convert String to long in Java?如何在Java中将String转换为long?
【发布时间】:2011-12-03 08:19:20
【问题描述】:

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

【问题讨论】:

标签: java string


【解决方案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();
      
      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.");
      }
      

      【讨论】:

        【解决方案6】:

        最好的方法是Long.valueOf(str),因为它依赖于Long.valueOf(long),它使用内部缓存使其更高效,因为它会在需要时重用Long 的缓存实例,包括从-128127

        返回一个代表指定 long 值的 Long 实例。如果一个 new Long 实例不是必须的,这个方法一般应该是 优先使用构造函数Long(long),因为这种方法是 可能会产生显着更好的空间和时间性能 缓存经常请求的值。请注意,与 Integer类中对应的方法,这个方法不是必须的 缓存特定范围内的值。

        感谢auto-unboxing 允许将包装类的实例转换为其对应的原始类型,代码如下:

        long val = Long.valueOf(str);
        

        请注意,如果提供的String 与签名的long 不匹配,则之前的代码仍然可以抛出NumberFormatException

        一般来说,使用 IntegerBooleanLong 等包装器类的 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);
            

            【讨论】:

              猜你喜欢
              • 2021-10-08
              • 2013-10-31
              • 2019-07-31
              • 2012-05-01
              • 1970-01-01
              • 2021-10-24
              • 1970-01-01
              • 1970-01-01
              • 2018-05-29
              相关资源
              最近更新 更多