Как удалить специальные символы из базы данных SQLite при импорте из файла CSV в Android Studio?

У меня есть файл CSV с именем штрих-код, я успешно импортировал этот файл в свою базу данных SQLite, но проблема в том, что данные сохраняются в том виде, в котором они есть в файле CSV.
Данные, которые я получаю: 8.90103E+12, данные, которые я хотел: 8901030382253.

Пример:
ТОВАР – EAN_CODE
100047253 - 8.90103E+12
100047252 - 8.90103E+12

У меня есть два столбца, данные в Ean_code не попадают в мою базу данных. Я использовал функцию обрезки, но o/p остается прежним.

Мой код:

if (exportDir.exists()) {
            FileReader file = null;
            try {
                file = new FileReader(exportDir);

                BufferedReader buffer = new BufferedReader(file);
                String line = "";
                int iteration = 0;
                ArrayList<MasterDataModel2> arrayList_stock2 = new ArrayList<>();

                while ((line = buffer.readLine()) != null) {
                    if (iteration == 0) {
                        iteration++;
                        continue;
                    }
                    //StringBuilder sb = new StringBuilder();
                    String[] str = line.split(",");

                    arrayList_stock2.add(new MasterDataModel2(str[0].replace("\"", ""), str[1].replace("\"", "")));
                    //arrayList_stock2.add(new MasterDataModel2(str[0],str[1]));

                    Log.d("insertTotal", "Msg:" + lastId);
                }
                Log.e("size",String.valueOf(arrayList_stock2.size()));
                db.addAllMasterData2(arrayList_stock2);

            } catch (FileNotFoundException e) {
                e.printStackTrace();
                //CallingImportantMethod.showToast(this, "File is not available");
            } catch (IOException e) {
                e.printStackTrace();
                //CallingImportantMethod.showToast(this, "Something wents wrong");
            }
        }

Имеет ли этот EAN_CODE какое-либо значение в значении. Потому что E+12 означает, что в экспоненциальном представлении это равно 10^12. Поэтому, если точное значение важно, может быть не очень хорошей идеей просто отбросить обозначение, а преобразовать его в нормальный формат, а затем сохранить.

Anjana 25.07.2019 12:13

No sir ean_code не имеет общего формата, например: 8.90103E+12 на самом деле ->8901071354103.

rajBedi 25.07.2019 12:15

Хорошо. поэтому ваши значения в csv разделены запятыми или разделены новой строкой. Потому что я не понимаю, почему вы разделяете строки запятыми. Будет лучше, если вы выложите небольшой пример того, как данные находятся в самом csv.

Anjana 25.07.2019 12:19

Сэр, он не разделен запятой, но при открытии в блокноте он показывает разделенные запятой.

rajBedi 25.07.2019 12:23

Не могли бы вы добавить скриншот файла csv. Если он большой, подойдет и небольшая его часть.

Anjana 25.07.2019 12:26

да, сэр, вот оно: drive.google.com/file/d/1vD_YiI5K88l_adQ9-Ark5oQWIRNPqNjk/…

rajBedi 25.07.2019 12:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
193
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Этот код ниже неверен.

arrayList_stock2.add(new MasterDataModel2(str[0].replace("\"", ""), str[1].replace("\"", "")));

\ — это специальный escape-символ, поэтому вам нужно \\, чтобы избежать его. Несмотря на то, что это не связано с исходной проблемой, рекомендуем вам прочитать это, чтобы иметь четкое представление об использовании обратной косой черты в java.

Итак, вернемся к проблеме, я думаю, вам действительно не нужно вызывать str[].replace(). Поправьте меня, если я ошибаюсь.

arrayList_stock2.add(new MasterDataModel2(str[0].trim(), str[1].trim()));

Я думаю, что приведенного выше сегмента кода будет достаточно.

Обновлено: для вашей реальной проблемы вы можете использовать ниже. Чтобы избежать нулевых проблем, вам также может потребоваться проверить это.

if (str[1] != null) {
    Double eanCodeDouble = Double.parseDouble(str[1]);
    NumberFormat nf = NumberFormat.getInstance();
    String eanCodeString = nf.format(eanCodeDouble);
    System.out.println(resultedString);
} else {
    String eanCodeString = '';
}

if (str[0] == null) {
   str[0] = '';
}
    arrayList_stock2.add(new MasterDataModel2(str[0].trim(), eanCodeString));

Брат, я использовал эту функцию обрезки, как я уже упоминал в своей проблеме, все еще получая тот же результат.

rajBedi 25.07.2019 13:10

Что вы подразумеваете под "правильным". Четко упомяните, как данные, которые вы хотите сохранить, и как они на самом деле сохраняются сейчас?

Anjana 25.07.2019 13:13

Данные, которые я получаю: 8.90103E+12, данные, которые я хотел: 8901030382253.

rajBedi 25.07.2019 13:27

Ах я вижу. Итак, вы хотите сохранить EAN_CODE в числовом формате, даже если они считываются из csv в научном формате. Я обновил ответ. Я думаю, это может решить вашу проблему. Просто обновите меня, если что-то не так.

Anjana 26.07.2019 11:18

Спасибо за ваши усилия, но я получаю это сейчас: Вызвано: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 не знаю, что делать.. Я решил ошибку, но все еще получаю тот же o/p, брат...

rajBedi 26.07.2019 11:58

Рад, что это помогло.

Anjana 26.07.2019 12:28

брат еще раз спасибо! все работает нормально, но когда ячейки пусты, приложение вылетает, показывая: исключение пустой строки. Как это решить плиз..

rajBedi 29.07.2019 06:45

Да. Это из-за split(). Его нельзя вызывать для нулевых значений. Ячейки пусты означает, что строка пуста. Таким образом, вызов метода split() для нулей вызовет исключение. Чтобы избежать этого, вы должны проверить, является ли строка нулевой или нет, прежде чем остальная часть кода будет выполнена.

Anjana 29.07.2019 07:25

Братан, это мой код: String[] str = line.split(","); String[] str2 = line.split(","); Двойной eanCodeDouble = Double.parseDouble(str2[0]); NumberFormat nf = NumberFormat.getInstance(); Строка eanCodeString = nf.format(eanCodeDouble); arrayList_stock2.add(новый MasterDataModel2(String.valueOf(eanCodeString).replaceAll(",‌​","")),String.valueOf‌​(str[1]).replaceAll(‌​"\"","")) ); вы можете мне снова помочь???

rajBedi 29.07.2019 07:33

почему вы разделяете «линию» дважды. str и str2 получат одинаковый результат?

Anjana 29.07.2019 07:38

да, я знаю, я просто хочу разделить их, чтобы было легче понять. str для позиции «0», а str2 для позиции «1».

rajBedi 29.07.2019 07:56

Я обновил ответ. Пожалуйста, обратитесь к нему в качестве примера. Это может не совсем решить вашу проблему. Но что-то вдоль этого будет делать.

Anjana 29.07.2019 08:31

ты мне уже очень помог ..попробую ..добрый день приятель!! Спасибо..

rajBedi 29.07.2019 10:50

Другие вопросы по теме