У мене просте питання в Java: Як я можу перетворити , Stringякий був отриманий Long.toString()в long?
У мене просте питання в Java: Як я можу перетворити , Stringякий був отриманий Long.toString()в long?
Відповіді:
Використовуйте 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
Щоб перетворити рядок у довгий (об'єкт), використовуйтеLong.valueOf(String s).longValue();
Дивіться посилання
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) - очевидно, слід уважно ставитися до захисту від нечислових номерів, якщо це можливо у вашому коді.
Кращий підхід , Long.valueOf(str)як він спирається на Long.valueOf(long)який використовує внутрішній кеш , що робить його більш ефективним , так як він буде повторно використовувати в разі необхідності кешованих примірників Longпереходу від -128до 127включені.
Повертає
Longекземпляр, що представляє вказане довге значення. Якщо новий екземпляр Long не потрібен, цей метод, як правило, слід використовувати перевагу конструкторуLong(long), оскільки цей метод, ймовірно, дає значно кращі показники простору та часу, кешуючи часто запитувані значення. Зауважте, що на відміну від відповідного методу в класі Integer, цей метод не потрібен для кешування значень у певному діапазоні.
Завдяки автоматичному розпакуванню, що дозволяє перетворити екземпляр класу обгортки у відповідний примітивний тип, код буде таким:
long val = Long.valueOf(str);
Зверніть увагу, що попередній код все ще може викинути а, NumberFormatExceptionякщо наданий Stringне відповідає підписаному long.
Взагалі кажучи, це хороша практика , щоб використовувати staticфабричний метод valueOf(str)класу - оболонки , як Integer, Boolean, Long, ... , так як більшість з них повторно примірників кожного разу , коли це можливо , що робить їх потенційно більш ефективними в термін обсяг пам'яті , ніж відповідні parseметоди або конструкторах .
Уривок з ефективної Java, Item 1 написаний Джошуа Блохом :
Ви можете часто уникати створення непотрібних об'єктів, використовуючи статичні заводські методи (пункт 1), надаючи перевагу конструкторам з незмінних класів, які забезпечують і те, і інше. Наприклад, статичний заводський метод
Boolean.valueOf(String)майже завжди кращий перед конструкторомBoolean(String). Конструктор створює новий об'єкт щоразу, коли його викликають, тоді як статичний заводський метод ніколи цього не вимагає і не буде на практиці.
Long number = Long.valueOf("123"), Long number = Long.parseLong("123")і в Long number = Long.valueOf(Long.parseString("123")кінцевому підсумку робимо майже те саме. Те , що ви дійсно хочете бути обережними, не викликаючи конструктор боксових примітивних класів - це може бути марнотратними. Тому не пишітьLong number = new Long(parseLong("123"))
Існує певний спосіб перетворити рядок у цілий ряд :
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.");
}
Це досить просто, користуйтеся
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);
Ви закінчили !!!
Для тих, хто перейшов на Котлін, просто використовуйте
string.toLong()
That call Long.parseLong(string)під капотом
Якщо ви використовуєте Map з загальним, вам потрібно перетворити значення в 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);