Làm cách nào để chuyển đổi String thành dài trong Java?


400

Tôi có một câu hỏi đơn giản trong Java: Làm thế nào tôi có thể chuyển đổi một Stringmà đã thu được bằng cách Long.toString()để long?


1
5 cách với các ví dụ về cách chuyển đổi chuỗi thành dài trong Java
Somnath Muluk

1
Bên trong tất cả các phiên bản gọi phương thức Long.parseLong (Chuỗi) . Sử dụng trực tiếp. Tiết kiệm vài chu kỳ CPU.
lokesh

Vui lòng tham khảo cái này: developer.android.com/reference/java/lang/
Kẻ

Câu trả lời:


664

Sử dụng 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
Còn "Ăn trưa / tối" thì sao?
Narendra Sorathiya

mã đẹp. công việc của nó
sirmagid

140

Để chuyển đổi Chuỗi thành Dài (đối tượng), hãy sử dụngLong.valueOf(String s).longValue();

Xem liên kết


1
Đó không phải là những gì OP đang yêu cầu.
Christian Mann

7
@Belgi. Không, nó trở lạijava.lang.Long
Alexander Pogrebnyak

@Belgi - Long.valueOf trả về một Long, không phải là một chuỗi.
Don Roby

4
@MikeDaniels, vì đây là cách làm rất gián tiếp. Xem docs.oracle.com/javase/7/docs/api/java/lang/ , nó trả về một đối tượng Long không phải là nguyên thủy dài.
Pacerier

Long.valueOf (Chuỗi s) cho Long (đối tượng) và Long.valueOf (Chuỗi s) .longValue () cho độ dài (nguyên thủy).
Champ

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

Cách tiếp cận tốt nhất là Long.valueOf(str)vì nó dựa vào Long.valueOf(long)đó sử dụng một bộ nhớ cache nội bộ làm cho nó hiệu quả hơn vì nó sẽ tái sử dụng nếu cần thiết các trường hợp lưu trữ của Longđi từ -128để 127đưa vào.

Trả về một Longthể hiện đại diện cho giá trị dài được chỉ định. Nếu không cần một phiên bản Long mới, phương thức này thường được sử dụng theo sở thích của nhà xây dựng Long(long), vì phương pháp này có khả năng mang lại hiệu suất không gian và thời gian tốt hơn đáng kể bằng cách lưu trữ các giá trị được yêu cầu thường xuyên. Lưu ý rằng không giống như phương thức tương ứng trong lớp Integer, phương thức này không bắt buộc để lưu các giá trị trong một phạm vi cụ thể.

Nhờ tự động hủy hộp cho phép chuyển đổi thể hiện của lớp bao bọc thành kiểu nguyên thủy tương ứng của nó, mã sau đó sẽ là:

long val = Long.valueOf(str);

Xin lưu ý rằng mã trước đó vẫn có thể ném NumberFormatExceptionnếu mã được cung cấp Stringkhông khớp với chữ ký long.

Nói chung, đó là một thực hành tốt để sử dụng các staticphương pháp nhà máy valueOf(str)của một lớp wrapper như Integer, Boolean, Long, ... vì hầu hết trong số họ tái sử dụng các trường hợp bất cứ khi nào có thể làm cho họ có khả năng hiệu quả hơn trong nhiệm kỳ của bộ nhớ hơn tương ứng với parsecác phương pháp hoặc các hàm .


Trích từ Java hiệu quả Item 1 được viết bởi Joshua Bloch :

Bạn thường có thể tránh việc tạo các đối tượng không cần thiết bằng cách sử dụng các phương thức tĩnh của nhà máy (Mục 1) để ưu tiên cho các nhà xây dựng trên các lớp bất biến cung cấp cả hai. Ví dụ, phương thức nhà máy tĩnh Boolean.valueOf(String)hầu như luôn luôn thích hợp hơn với hàm tạo Boolean(String). Hàm tạo tạo một đối tượng mới mỗi lần nó được gọi, trong khi phương thức tĩnh nhà máy không bao giờ bắt buộc phải làm như vậy và sẽ không thực tế.


1
Điều đáng chú ý là trình tự hủy hộp thư bị "gỡ bỏ" bởi trình biên dịch, trong trường hợp dài -> Long, Long.valueOf (primitiveLong). Vì vậy Long number = Long.valueOf("123"), Long number = Long.parseLong("123")Long number = Long.valueOf(Long.parseString("123")tất cả cuối cùng làm khá nhiều điều tương tự. Những gì bạn làm muốn cẩn thận về việc không được gọi constructor của lớp nguyên thủy đóng hộp - đó có thể là lãng phí. Vì vậy, đừng viếtLong number = new Long(parseLong("123"))
Ian Robertson

4

Có một số cách để chuyển đổi chuỗi thành 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();

Chúng ta có thể rút ngắn thành:

String numberAsString = "1234";
long number = new Long(numberAsString).longValue();

Hoặc chỉ

long number = new Long("1234").longValue();

4) Sử dụng định dạng Decemal:

    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

Nó khá đơn giản, sử dụng Long.valueOf(String s);

Ví dụ:

String s;
long l;

Scanner sc=new Scanner(System.in);
s=sc.next();
l=Long.valueOf(s);
System.out.print(l);

Bạn đã hoàn tất!!!


0

Đối với những người chuyển sang Kotlin chỉ cần sử dụng
string.toLong()
Điều đó sẽ gọi Long.parseLong(string)dưới mui xe


-1

Trong trường hợp bạn đang sử dụng Bản đồ không có chung chung, thì bạn cần chuyển đổi giá trị thành Chuỗi và sau đó thử chuyển đổi thành Dài. Dưới đây là mã mẫu

    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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.