Nasıl Java için String uzun dönüştürmek için?


400

Java basit bir soru var: Nasıl dönüştürebilirsiniz Stringile elde edildiğini Long.toString()hiç long?


1
Java'da string uzunluğuna nasıl dönüştürüleceğine ilişkin 5 yol
Somnath Muluk

1
Dahili olarak tüm sürümler Long.parseLong (String) yöntemini çağırır . Doğrudan kullanın. Birkaç CPU döngüsünden tasarruf edin.
lokesh

Yanıtlar:


664

kullanım 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
"Öğle / Akşam Yemeği" ne olacak?
Narendra Sorathiya

güzel kod. onun işi
sirmagid

140

Bir dönüştürmek için Dize a Long (nesne), kullanımLong.valueOf(String s).longValue();

Bağlantıya bakın


1
OP'nin sorduğu şey bu değil.
Christian Mann

7
@Belgi. Hayır, geri dönüyorjava.lang.Long
Alexander Pogrebnyak

@Belgi - Long.valueOf, bir dize değil bir Uzun döndürür.
Don Roby

4
@MikeDaniels, Çünkü bunu yapmanın çok dolaylı bir yolu. Bkz. Docs.oracle.com/javase/7/docs/api/java/lang/… , ilkel değil uzun bir nesne döndürür .
Pacerier

Long.valueOf (String s) bir Long (nesne) ve Long.valueOf (String s) verir. LongValue (), long (ilkel) değerini verir.
Şampiyon

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

En iyi yaklaşım olduğunu Long.valueOf(str)o dayanmaktadır olarak Long.valueOf(long)önbelleğe alınmış örneklerini gerekirse o yeniden olacağından daha verimli hale dahili önbellek kullanan Longgiden -128etmek 127dahil.

LongBelirtilen uzun değeri temsil eden bir örnek döndürür . Yeni bir Long örneği gerekli değilse, bu yöntem genellikle yapıcıya tercih edilir Long(long), çünkü bu yöntem sıkça istenen değerleri önbelleğe alarak önemli ölçüde daha iyi alan ve zaman performansı sağlar. Tamsayı sınıfındaki karşılık gelen yöntemin aksine, bu yöntemin belirli bir aralıktaki değerleri önbelleğe almak için gerekli olmadığını unutmayın.

Sayesinde otomatik kutusu açma karşılık gelen basit tür bir sargı sınıfın örneği dönüştürmek için izin kodu daha sonra olacaktır:

long val = Long.valueOf(str);

NumberFormatExceptionSağlanan Stringbir imzalı ile eşleşmezse , önceki kodun yine de a atabileceğini lütfen unutmayın long.

Genel olarak konuşursak, bu iyi bir uygulama kullanmaktır staticfabrika yöntemini valueOf(str)gibi bir sarıcı sınıfın Integer, Boolean, Longçoğu örneklerini yeniden beri ... o tekabül daha bellek ayak izi vadede mümkün yapma onları potansiyel olarak daha verimli olduğu zaman parseyöntemlerle ya da yapımcıların .


Joshua Bloch tarafından yazılan Etkili Java'dan bir alıntı :Item 1

Genellikle , her ikisini de sağlayan değişmez sınıflardaki kuruculara tercih edilen statik fabrika yöntemlerini (Öğe 1) kullanarak gereksiz nesneler oluşturmaktan kaçınabilirsiniz . Örneğin, statik fabrika yöntemi Boolean.valueOf(String)hemen hemen her zaman kurucuya tercih edilir Boolean(String). Yapıcı her çağrıldığında yeni bir nesne yaratırken, statik fabrika yönteminin hiçbir zaman bunu yapması gerekmez ve pratikte olmaz.


1
Otomatik kutunun derleyici tarafından "uzun,> Uzun, Uzun. Değer (primitiveLong) durumunda" desugared "olduğunu belirtmek gerekir. Yani Long number = Long.valueOf("123"), Long number = Long.parseLong("123")ve Long number = Long.valueOf(Long.parseString("123")hepsi hemen hemen aynı şeyi yapıyor sonunda. Ne yapmak konusunda kutulu ilkel sınıfların kurucuları çağırarak değil dikkatli olmasını istiyorum - o savurgan olabilir. Yani yazmaLong number = new Long(parseLong("123"))
Ian Robertson

4

Dizeyi Tamsayı'ya dönüştürmenin bir yolu vardır :

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

Kısaltabiliriz:

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

Ya da sadece

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

4) Decemal formatını kullanma:

    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

Oldukça basit, kullanın Long.valueOf(String s);

Örneğin:

String s;
long l;

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

Sen bittin!!!


0

Kotlin'e geçenler için sadece kaputun altında
string.toLong()
arayacakları kullanınLong.parseLong(string)


-1

Harita'yı genel olarak kullanmıyorsanız, değeri Dize'ye dönüştürmeniz ve ardından Uzun'a dönüştürmeyi denemeniz gerekir. Aşağıda örnek kod

    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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.