Mam proste pytanie w Java: Jak mogę przekonwertować String
które uzyskano przez Long.toString()
do long
?
Mam proste pytanie w Java: Jak mogę przekonwertować String
które uzyskano przez Long.toString()
do long
?
Odpowiedzi:
Posługiwać się 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
Aby przekonwertować ciąg znaków na długi (obiekt), użyjLong.valueOf(String s).longValue();
Zobacz link
java.lang.Long
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());
}
}
}
Long.valueOf (String s) - oczywiście należy zachować ostrożność, aby zabezpieczyć się przed liczbami, jeśli jest to możliwe w kodzie.
Najlepsze podejście Long.valueOf(str)
polega na Long.valueOf(long)
tym, że polega na tym, który wykorzystuje wewnętrzną pamięć podręczną, co czyni ją bardziej wydajną, ponieważ w razie potrzeby ponownie użyje buforowanych instancji Long
przechodzenia od -128
do 127
uwzględnionego.
Zwraca
Long
instancję reprezentującą określoną długą wartość. Jeśli nowa instancja typu Long nie jest wymagana, metoda ta powinna być ogólnie stosowana zamiast konstruktoraLong(long)
, ponieważ metoda ta prawdopodobnie zapewni znacznie lepszą wydajność przestrzeni i czasu dzięki buforowaniu często żądanych wartości. Należy zauważyć, że w przeciwieństwie do odpowiedniej metody w klasie Integer, ta metoda nie jest wymagana do buforowania wartości w określonym zakresie.
Dzięki automatycznemu rozpakowaniu pozwalającemu konwertować instancję klasy opakowania na odpowiadający jej typ pierwotny, kod wyglądałby następująco:
long val = Long.valueOf(str);
Pamiętaj, że poprzedni kod nadal może wyrzucić a, NumberFormatException
jeśli podany String
nie pasuje do podpisanego long
.
Ogólnie rzecz biorąc, jest to dobra praktyka, aby użyć static
metody fabryki valueOf(str)
z klasy otoki jak Integer
, Boolean
, Long
, ..., ponieważ większość z nich ponowne przypadki, gdy jest to możliwe, co czyni je potencjalnie bardziej efektywny w perspektywie zużycie pamięci niż odpowiednich parse
metod i konstruktorów .
Fragment Effective Java Item 1
napisany przez Joshua Blocha :
Często można uniknąć tworzenia niepotrzebnych obiektów, stosując statyczne metody fabryczne (pozycja 1) zamiast konstruktorów w niezmiennych klasach, które zapewniają oba. Na przykład statyczna metoda fabryczna
Boolean.valueOf(String)
jest prawie zawsze lepsza niż konstruktorBoolean(String)
. Konstruktor tworzy nowy obiekt za każdym razem, gdy jest wywoływany, podczas gdy statyczna metoda fabryczna nigdy nie jest do tego wymagana i nie będzie w praktyce.
Long number = Long.valueOf("123")
, Long number = Long.parseLong("123")
a Long number = Long.valueOf(Long.parseString("123")
wszystko kończy się robi prawie to samo. To, na co chcesz uważać, to nie wywoływać konstruktorów klas prymitywnych w pudełkach - może to być marnotrawstwem. Więc nie piszLong number = new Long(parseLong("123"))
Istnieje sposób przekonwertowania ciągu na liczbę całkowitą :
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();
Możemy skrócić do:
String numberAsString = "1234";
long number = new Long(numberAsString).longValue();
Lub tylko
long number = new Long("1234").longValue();
4) Używając formatu 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.");
}
To dość proste, użyj
Long.valueOf(String s);
Na przykład:
String s;
long l;
Scanner sc=new Scanner(System.in);
s=sc.next();
l=Long.valueOf(s);
System.out.print(l);
Jesteś skończony!!!
Dla tych, którzy przeszli na Kotlin, skorzystaj z
string.toLong()
That will call Long.parseLong(string)
under the hood
Jeśli używasz mapy bez ogólnego, musisz przekonwertować wartość na ciąg, a następnie spróbować przekonwertować na długi. Poniżej znajduje się przykładowy 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);