Я получил простой вопрос в 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
Чтобы преобразовать String в Long (объект), используйте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
методы или конструкторах ,
Выдержка из « Эффективной Явы», 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"))
Есть несколько способов преобразовать строку в Integer :
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);
Вы сделали !!!
Для тех, кто перешел на Kotlin, просто используйте
string.toLong()
То, что будет звонить Long.parseLong(string)
под капотом
В случае, если вы используете Map без использования generic, вам необходимо преобразовать значение в 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);