Pertanyaan Bagaimana cara mengonversi String ke int di Java?


Bagaimana saya bisa mengonversi String ke sebuah int di Jawa?

String saya hanya berisi angka, dan saya ingin mengembalikan nomor yang diwakilinya.

Misalnya, diberi string "1234" hasilnya harus berupa angka 1234.


2514
2018-04-07 18:27


asal


Jawaban:


String myString = "1234";
int foo = Integer.parseInt(myString);

Lihat Dokumentasi Java untuk informasi lebih lanjut.


3554
2018-04-07 18:29



Misalnya, berikut dua cara:

Integer x = Integer.valueOf(str);
// or
int y = Integer.parseInt(str);

Ada sedikit perbedaan antara metode ini:

  • valueOf mengembalikan instance baru atau tembolok dari java.lang.Integer
  • parseInt mengembalikan primitif int.

Hal yang sama berlaku untuk semua kasus: Short.valueOf/parseShort, Long.valueOf/parseLong, dll.


588
2018-04-07 18:36



Nah, hal yang sangat penting untuk dipertimbangkan adalah bahwa parser Integer melempar NumberFormatException sebagaimana dinyatakan dalam Javadoc.

int foo;
String StringThatCouldBeANumberOrNot = "26263Hello"; //will throw exception
String StringThatCouldBeANumberOrNot2 = "26263"; //will not throw exception
try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot);
} catch (NumberFormatException e) {
      //Will Throw exception!
      //do something! anything to handle the exception.
}

try {
      foo = Integer.parseInt(StringThatCouldBeANumberOrNot2);
} catch (NumberFormatException e) {
      //No problem this time, but still it is good practice to care about exceptions.
      //Never trust user input :)
      //Do something! Anything to handle the exception.
}

Penting untuk menangani pengecualian ini ketika mencoba untuk mendapatkan nilai integer dari argumen terpisah atau secara dinamis menguraikan sesuatu.


215
2018-04-30 06:54



Lakukan secara manual:

public static int strToInt( String str ){
    int i = 0;
    int num = 0;
    boolean isNeg = false;

    //Check for negative sign; if it's there, set the isNeg flag
    if (str.charAt(0) == '-') {
        isNeg = true;
        i = 1;
    }

    //Process each character of the string;
    while( i < str.length()) {
        num *= 10;
        num += str.charAt(i++) - '0'; //Minus the ASCII code of '0' to get the value of the charAt(i++).
    }

    if (isNeg)
        num = -num;
    return num;
}

72
2017-09-11 02:08



Saat ini saya sedang melakukan tugas untuk kuliah, di mana saya tidak dapat menggunakan ekspresi tertentu, seperti yang di atas, dan dengan melihat tabel ASCII, saya berhasil melakukannya. Ini adalah kode yang jauh lebih rumit, tetapi bisa membantu orang lain yang dibatasi seperti saya.

Hal pertama yang harus dilakukan adalah menerima input, dalam hal ini, serangkaian angka; Saya akan menyebutnya String number, dan dalam hal ini, saya akan memberikan contoh menggunakan angka 12, oleh karena itu String number = "12";

Keterbatasan lain adalah kenyataan bahwa saya tidak bisa menggunakan siklus berulang, oleh karena itu, a for siklus (yang akan menjadi sempurna) tidak dapat digunakan. Ini membatasi kita sedikit, tetapi sekali lagi, itulah tujuannya. Karena saya hanya butuh dua digit (mengambil dua digit terakhir), yang sederhana charAtdipecahkan itu:

 // Obtaining the integer values of the char 1 and 2 in ASCII
 int semilastdigitASCII = number.charAt(number.length()-2);
 int lastdigitASCII = number.charAt(number.length()-1);

Memiliki kode-kode itu, kita hanya perlu melihat ke atas meja, dan melakukan penyesuaian yang diperlukan:

 double semilastdigit = semilastdigitASCII - 48;  //A quick look, and -48 is the key
 double lastdigit = lastdigitASCII - 48;

Sekarang, mengapa dua kali lipat? Yah, karena langkah yang benar-benar "aneh". Saat ini kita memiliki dua ganda, 1 dan 2, tetapi kita perlu mengubahnya menjadi 12, tidak ada operasi matematika yang bisa kita lakukan.

Kami membagi yang terakhir (lastdigit) dengan 10 dalam mode 2/10 = 0.2 (karenanya mengapa ganda) seperti ini:

 lastdigit = lastdigit/10;

Ini hanya bermain dengan angka. Kami mengubah digit terakhir menjadi desimal. Tapi sekarang, lihat apa yang terjadi:

 double jointdigits = semilastdigit + lastdigit; // 1.0 + 0.2 = 1.2

Tanpa terlalu serius dalam matematika, kita hanya mengisolasi unit angka dari angka. Anda lihat, karena kami hanya mempertimbangkan 0-9, membagi dengan kelipatan 10 adalah seperti membuat "kotak" di mana Anda menyimpannya (pikirkan kembali ketika guru kelas pertama Anda menjelaskan apa unit dan seratus itu). Begitu:

 int finalnumber = (int) (jointdigits*10); // Be sure to use parentheses "()"

Dan begitulah. Anda mengubah String digit (dalam kasus ini, dua digit), menjadi integer yang terdiri dari dua digit tersebut, mempertimbangkan batasan berikut:

  • Tidak ada siklus yang berulang
  • Tidak ada Ekspresi "Ajaib" seperti parseInt

38
2018-03-20 23:51



Solusi alternatif digunakan Apache Commons ' NumberUtils:

int num = NumberUtils.toInt("1234");

Utilitas Apache bagus karena jika string adalah format angka yang tidak valid maka 0 selalu dikembalikan. Oleh karena itu menghemat blok try catch.

Apache NumberUtils API Versi 3.4


33
2017-08-27 12:07



Integer.decode

Anda juga bisa menggunakan public static Integer decode(String nm) throws NumberFormatException.

Ini juga berfungsi untuk basis 8 dan 16:

// base 10
Integer.parseInt("12");     // 12 - int
Integer.valueOf("12");      // 12 - Integer
Integer.decode("12");       // 12 - Integer
// base 8
// 10 (0,1,...,7,10,11,12)
Integer.parseInt("12", 8);  // 10 - int
Integer.valueOf("12", 8);   // 10 - Integer
Integer.decode("012");      // 10 - Integer
// base 16
// 18 (0,1,...,F,10,11,12)
Integer.parseInt("12",16);  // 18 - int
Integer.valueOf("12",16);   // 18 - Integer
Integer.decode("#12");      // 18 - Integer
Integer.decode("0x12");     // 18 - Integer
Integer.decode("0X12");     // 18 - Integer
// base 2
Integer.parseInt("11",2);   // 3 - int
Integer.valueOf("11",2);    // 3 - Integer

Jika kamu ingin mendapatkannya int dari pada Integer Kamu dapat memakai:

  1. Unboxing:

    int val = Integer.decode("12"); 
    
  2. intValue():

    Integer.decode("12").intValue();
    

27
2018-03-07 00:42



Kapanpun ada sedikit kemungkinan bahwa String yang diberikan tidak mengandung Integer, Anda harus menangani kasus khusus ini. Sayangnya, metode Java standar Integer::parseInt dan Integer::valueOf melempar NumberFormatException untuk memberi sinyal kasus khusus ini. Jadi, Anda harus menggunakan pengecualian untuk kontrol aliran, yang umumnya dianggap sebagai gaya pengkodean yang buruk.

Menurut saya, kasus khusus ini harus ditangani dengan mengembalikan sebuah Optional<Integer>. Karena Java tidak menawarkan metode semacam itu, saya menggunakan pembungkus berikut:

private Optional<Integer> tryParseInteger(String string) {
    try {
        return Optional.of(Integer.valueOf(string));
    } catch (NumberFormatException e) {
        return Optional.empty();
    }
}

Pemakaian:

// prints 1234
System.out.println(tryParseInteger("1234").orElse(-1));
// prints -1
System.out.println(tryParseInteger("foobar").orElse(-1));

Sementara ini masih menggunakan pengecualian untuk kontrol aliran secara internal, kode penggunaan menjadi sangat bersih.


20
2018-04-04 03:13