Я получил простой вопрос в Java: как я могу преобразовать String
, который был получен с помощью Long.toString()
в long
?
Как преобразовать String в long в Java?
Ответ 1
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
Чтобы преобразовать String в Long (объект), используйте Long.valueOf(String s).longValue();
Смотрите ссылку
Ответ 3
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());
}
}
}
Ответ 4
Long.valueOf(String s) - очевидно, необходимо проявлять осторожность, чтобы защитить от не-чисел, если это возможно в вашем коде.
Ответ 5
Лучший подход Long.valueOf(str)
, поскольку он полагается на Long.valueOf(long)
, который использует внутренний кеш, делая его более эффективным, так как он будет повторно использовать при необходимости кэшированные экземпляры Long
, идущие от -128
до 127
.
Возвращает экземпляр
Long
, представляющий указанное длинное значение. Если новый длинный экземпляр не требуется, этот метод обычно должен быть используется вместо конструктораLong(long)
, так как этот метод вероятно, значительно улучшит пространство и время кэширование часто запрашиваемых значений. Обратите внимание, что в отличие от соответствующий метод в классе Integer, этот метод не требуется для кэширования значений в определенном диапазоне.
Благодаря авто-распаковка, позволяющая преобразовать экземпляр класса-оболочки в его соответствующий примитивный тип, код будет:
long val = Long.valueOf(str);
Обратите внимание, что предыдущий код еще может выставить NumberFormatException
, если предоставленный String
не соответствует подписанному Long
.
Вообще говоря, хорошей практикой является использование метода static
factory valueOf(str)
класса-оболочки, такого как Integer
, Boolean
, Long
,... поскольку большинство из них повторно используют экземпляры когда это возможно, что делает их потенциально более эффективными с точки зрения памяти, чем соответствующие методы или конструкторы parse
.
Выдержка из Эффективная Java Item 1
, написанная Джошуа Блохом:
Вы можете часто избегать создания ненужных объектов, используя статические factory (пункт 1) вместо конструкторов на неизменяемых классы, которые обеспечивают оба. Например, статический метод factory
Boolean.valueOf(String)
почти всегда предпочтительнее конструкторBoolean(String)
. Конструктор создает новый объект каждый раз при его вызове, тогда как статический factory метод никогда требуется для этого и обычно на практике.
Ответ 6
Если вы используете карту с общим, то вам нужно преобразовать значение в 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);