#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 Я многому научился на этом сайте.