Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> чтение файла, чтение файла 
:(
    Опции темы
linkil
Дата 21.1.2012, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 26.12.2011

Репутация: нет
Всего: нет



подскажите 

есть файл в котором лежат данные такого вида


Код

...
0.000000000000E+00 2.356092445552E-04 1.932676241267E-12 0.000000000000E+00
2.080000000000E+02-1.019375000000E+02 3.854803425178E-09-2.144093904952E+00
-5.319714546204E-06 5.169815733097E-03 1.182034611702E-05 5.153629537582E+03
...


Делаю через сканер
Код

...
while (scanner.hasNext()){
str=scanner.next();
a1=Double.parseDouble(str);
}
...


получаю NumberFormatException если значения "сливаются" т.е.
2.080000000000E+02-1.019375000000E+02

как лучше обработать такую строку ?

Спасибо
 
PM MAIL   Вверх
dorogoyIV
Дата 21.1.2012, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(linkil @  21.1.2012,  17:29 Найти цитируемый пост)
2.080000000000E+02-1.019375000000E+02

может быть обрабатывать по точке?
два точка нуль, один точка нуль
т.е. находить начало числа по точке, потом делить на токены?
PM MAIL   Вверх
Pawl
Дата 21.1.2012, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 649
Регистрация: 22.4.2008
Где: Витебск

Репутация: 7
Всего: 28



судя по примеру, все Ваши числа одинаковой длины и каждая строка начинается с нового числа, а не с "хвоста" предыдущего. В этом случае я бы считывал файл построчно, а потом отрезал бы от строки куски по 18 или 19 символов (в зависимости от знака) и парсил бы этот кусок в double.
Код

     String s = "-1.019375000000E+02 -5.169815733097E-03";
     String st = "";
     if (s.startsWith("-")) {
         st = s.substring(0, 19);
         s = s.substring(19, s.length());
     } else {
         st = s.substring(0, 18);
         s = s.substring(18, s.length());
     }
        
        double d = Double.parseDouble(st);
     s = s.trim();

Если же числа разной длины и расположены в разных строках, то тогда лучше использовать регулярные выражения, что сложнее.


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
turbanoff
Дата 24.1.2012, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 57
Регистрация: 6.4.2009

Репутация: нет
Всего: 1



Цитата

Если же числа разной длины и расположены в разных строках, то тогда лучше использовать регулярные выражения, что сложнее.

Регулярку можно взять и чужую, если не разбираетесь. Например отсюда http://stackoverflow.com/questions/3681242...uble-from-regex
немного допиливаем под наши ограничения.
Зато ничего не разъедется при малейшем исправлении
Код

        String st = "0.000000000000E+00 2.356092445552E-04 1.932676241267E-12 0.000000000000E+00"+
                   "2.080000000000E+02-1.019375000000E+02 3.854803425178E-09-2.144093904952E+00"+
                   "-5.319714546204E-06 5.169815733097E-03 1.182034611702E-05 5.153629537582E+03";
        
        Pattern compile = Pattern.compile("[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]{1,2})?");
        Matcher matcher = compile.matcher(st);
        
        while (matcher.find()) {
            System.out.println(matcher.group());
        }


Это сообщение отредактировал(а) turbanoff - 24.1.2012, 07:53
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0654 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.