วิธีการแปลงสตริงให้ยาวใน Java?


400

ฉันได้รับคำถามง่ายๆใน Java: ฉันจะแปลงStringที่ได้รับจากLong.toString()เป็นlongอย่างไร


1
5 วิธีด้วยตัวอย่างสำหรับวิธีแปลงสตริงเป็น long ใน Java
Somnath Muluk

1
ภายในทุกรุ่นเรียกวิธีLong.parseLong (String) ใช้มันโดยตรง บันทึกรอบ CPU ไม่กี่
lokesh

โปรดอ้างอิงถึงสิ่งนี้: developer.android.com/reference/java/lang/…
Mihir Trivedi

คำตอบ:


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 (วัตถุ) ให้ใช้Long.valueOf(String s).longValue();

ดูลิงค์


1
นั่นไม่ใช่สิ่งที่ OP ขอ
Christian Mann

7
@Belgi ไม่ส่งคืนjava.lang.Long
Alexander Pogrebnyak

@Belgi - Long.valueOf ส่งคืน Long ไม่ใช่สตริง
Don Roby

4
@ MikeDaniels เพราะนี่เป็นวิธีการทำแบบอ้อม ๆ ดูdocs.oracle.com/javase/7/docs/api/java/lang/…มันส่งคืนวัตถุแบบยาวไม่ใช่แบบดั้งเดิม
Pacerier

Long.valueOf (String s) ให้ Long (object) และ Long.valueOf (String s) .longValue () ให้ความยาว (ดั้งเดิม)
แชมป์

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

   }
}

11

Long.valueOf (String s) - เห็นได้ชัดว่าต้องใช้ความระมัดระวังเนื่องจากการป้องกันที่ไม่ใช่ตัวเลขหากเป็นไปได้ในรหัสของคุณ


5

วิธีที่ดีที่สุดคือLong.valueOf(str)ขึ้นอยู่กับLong.valueOf(long)ว่าใช้แคชภายในที่ทำให้มีประสิทธิภาพมากขึ้นเพราะจะนำมาใช้ใหม่หากจำเป็นต้องใช้อินสแตนซ์แคชที่Longจะ-128เข้า127มา

ส่งคืนLongอินสแตนซ์ที่แสดงค่าความยาวที่ระบุ หากไม่จำเป็นต้องใช้อินสแตนซ์แบบยาวใหม่วิธีการนี้โดยทั่วไปควรใช้ในการตั้งค่าคอนสตรัคLong(long)เตอร์เนื่องจากวิธีนี้มีแนวโน้มที่จะให้พื้นที่และประสิทธิภาพของเวลาดีขึ้นอย่างมีนัยสำคัญ โปรดทราบว่าแตกต่างจากวิธีการที่สอดคล้องกันในชั้นเรียนจำนวนเต็มวิธีนี้ไม่จำเป็นต้องแคชค่าภายในช่วงที่เฉพาะเจาะจง

ขอบคุณauto-unboxing ที่อนุญาตให้แปลงอินสแตนซ์ของคลาส wrapper เป็นประเภทดั้งเดิมที่สอดคล้องกันจากนั้นโค้ดจะเป็น:

long val = Long.valueOf(str);

โปรดทราบว่ารหัสก่อนหน้านี้ยังคงสามารถโยนNumberFormatExceptionถ้ามีให้ไม่ตรงกับที่ลงนามStringlong

โดยทั่วไปก็เป็นวิธีที่ดีที่จะใช้staticวิธีการที่โรงงานvalueOf(str)ของชั้นห่อหุ้มเช่นInteger, Boolean, Long... เนื่องจากส่วนใหญ่ของพวกเขานำมาใช้อินสแตนซ์เมื่อใดก็ตามที่พวกเขาทำไปได้ที่อาจเกิดขึ้นได้อย่างมีประสิทธิภาพมากขึ้นในระยะยาวของรอยความทรงจำกว่าที่สอดคล้องกันparseวิธีการหรือการก่อสร้าง .


ข้อความที่ตัดตอนมาจากJava ที่มีประสิทธิภาพ Item 1เขียนโดยJoshua Bloch :

คุณมักจะสามารถหลีกเลี่ยงการสร้างวัตถุที่ไม่จำเป็นโดยใช้วิธีการแบบคงที่จากโรงงาน (รายการที่ 1) ในการตั้งค่าเพื่อสร้างในชั้นเรียนที่ไม่เปลี่ยนรูปซึ่งมีทั้ง ยกตัวอย่างเช่นการโรงงานคง อยู่เกือบตลอดเวลาดีกว่าที่จะสร้างBoolean.valueOf(String) Boolean(String)ตัวสร้างสร้างวัตถุใหม่ทุกครั้งที่มีการเรียกใช้ในขณะที่วิธีการคงที่จากโรงงานไม่จำเป็นต้องทำเช่นนั้นและจะไม่ได้รับการฝึกฝน


1
เป็นที่น่าสังเกตว่า auto-unboxing นั้นเป็น "desugared" โดยคอมไพเลอร์สำหรับกรณีของ 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"))
Ian Robertson

4

มีวิธีการแปลงสตริงเป็นจำนวนเต็ม :

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) การใช้รูปแบบ 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

มันค่อนข้างใช้งานง่าย 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()
นั่นจะโทรหาLong.parseLong(string)ภายใต้ประทุน


-1

ในกรณีที่คุณใช้ Map โดยไม่ต้องใช้ General คุณจะต้องแปลงค่าเป็น 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);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.