【问题标题】:How to remove special characters from SQLite DB while importing from a CSV file in Android Studio?从 Android Studio 中的 CSV 文件导入时如何从 SQLite DB 中删除特殊字符?
【发布时间】:2019-07-25 10:07:26
【问题描述】:

我有一个名为条形码的 CSV 文件,我已成功将该文件导入到我的 SQLite DB 中,但问题是数据正在保存,就像我们在 CSV 文件中所拥有的一样。
我得到的数据:8.90103E+12,我想要的数据:8901030382253。

示例:
ITEM - 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。因此,如果确切的值很重要,那么只删除符号可能不是一个好主意,而是将其转换为正常格式然后存储。
  • 没有先生 ean_code 是通用格式,例如:8.90103E+12 实际上是->8901071354103。
  • 好的。所以你在 csv 中的值是逗号分隔或换行分隔的。因为我不明白你为什么用逗号分隔行。如果你能发布一个关于数据在 csv 本身中的小例子会更好。
  • 先生,它不是逗号分隔的,但在记事本中打开时显示逗号分隔。
  • 您能否添加 csv 的屏幕截图。如果它很大,它的一小部分会做

标签: java android sqlite csv


【解决方案1】:

以下代码不正确。

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

\ 是特殊的转义字符,所以你需要\\ 来转义它。即使与原始问题无关,建议您阅读 this 以清楚了解 java 中反斜杠的用法。

所以回到问题,我想你真的不需要打电话给str[].replace()。如果我错了,请纠正我。

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

我认为上面的代码段就足够了。

编辑:对于您的实际问题,您可以在下面使用。为避免 null 问题,您可能还需要检查它。

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));

【讨论】:

  • 兄弟,我已经使用了这个修剪功能,正如我在我的问题中提到的,仍然得到相同的输出。
  • “正确”是什么意思。清楚地提及您希望如何保存的数据以及现在实际保存的方式?
  • 我得到的数据:8.90103E+12,我想要的数据:8901030382253。
  • 啊,我明白了。因此,您希望以数字格式存储 EAN_CODE,即使它们是以科学格式从 csv 中读取的。我已经更新了答案。我想这可以解决你的问题。如果有任何问题,请及时通知我。
  • 感谢您的努力,但我现在得到了这个:原因:java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 idk 该怎么办..我已经解决了错误,但仍然得到相同的 o/p 兄弟...
猜你喜欢
  • 2019-08-03
  • 2018-12-14
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 2021-08-09
  • 2013-03-22
相关资源
最近更新 更多