Как преобразовать строку с запятой в целое число и удвоить

#java #parsing

Вопрос:

Я новичок в программировании на Java. Я пытаюсь прочитать файл excel, в котором данные ячейки находятся в строковом значении. Я хотел бы получить значение в double или int. Вот примерные данные: 3,199,800.00 и 400,573.80. Теперь я хочу получить значение 3199800 и 400573.8.

Я могу получить эти значения, используя этот код:

 String value = valueCell.getStringCellValue()
    .trim()
    .replace(",", "")
    .replace(".00", "")
    .replace(".10", ".1")
    .replace(".20", ".2")
    .replace(".30", ".3")
    .replace(".40", ".4")
    .replace(".50", ".5")
    .replace(".60", ".6")
    .replace(".70", ".7")
    .replace(".80", ".8")
    .replace(".90", ".9");
 

Есть ли способ, которым я могу свести к минимуму приведенный выше код. Спасибо!

Отредактировано: Просто чтобы добавить, я хочу сохранить результат в виде строки. Спасибо!

Комментарии:

1. Это POI? Вы можете попробовать сразу же вызвать getNumericCellValue ().

Ответ №1:

Ну, в вашем случае вам нужно убрать запятые, так что самый простой способ, который я мог бы придумать, — это вот этот

 String someExcelNumber = "3,199,800.00";
System.out.print(Double.parseDouble(someExcelNumber.replace(",","")));
 

Сначала вы удаляете запятые, а затем анализируете их в двойном или любом другом формате на ваше усмотрение, но если запятые не были удалены, будет выдано исключение NumberFormatException

Ответ №2:

Нет необходимости обрезать лишние нули, вы можете просто разобрать их прямо на числа с Double.parseDouble помощью или Integer.parseInt (после удаления запятых). Так, например:

 Double.parseDouble(number.replace(",", ""))
 

Если вы хотите сохранить его в виде строки, вы можете использовать следующее регулярное выражение:

 number.replace(",", "").replaceFirst("(\d )\.0 $|(\d \.[1-9] )0*$", "$1$2")
 

Который заменяет любые нули, которым предшествует a . , и любое количество цифр.

Комментарии:

1. В числе есть запятые. итак, Integer.parseInt() дадим NumberFormatException

2. Я имел в виду текущий подход OPs, в вопросе запятые уже удаляются из строки.

3. Я попробовал это решение: номер.заменить(«,», «»).заменить(«(?

4. Извини, я replaceAll не хотел replace . Не стесняйтесь попробовать мой обновленный ответ.

Ответ №3:

Возможно использование только parseDouble:

 static String st1 = "3,199,800.00";
static String st2 = "400,573.80";

public static void main(String[] args) {

    System.out.println(Double.parseDouble(st2.replaceAll(",", "")));

    System.out.println((int)Double.parseDouble(st1.replaceAll(",", "")));

}
 

Результаты:

400573.8

3199800

Ответ №4:

Попробуй это.

 static String convert(String input) {
    return input.replaceAll(",|\.00$|(?<=\..)0$", "");
}

public static void main(String[] args) {
    System.out.println(convert("3,199,800.00"));
    System.out.println(convert("400,573.80"));
}
 

выход:

 3199800
400573.8
 

Комментарии:

1. Здравствуйте, это именно то, что я ищу. Большое вам спасибо 🙂

2. Есть ли какой-нибудь сайт, где я могу узнать, что вы сделали? заранее спасибо. Чтобы я мог понять, что ты сделал.

3. Это не работает для такого ввода, как 400,573.860 .

4. @HenryTwist Я не знаю правильного вывода для этого ввода.

5. @JCALTSako Я многому научился на этом сайте.