【问题标题】:Android line break in string from CSV来自CSV的字符串中的Android换行符
【发布时间】:2021-01-02 19:24:26
【问题描述】:

我正在构建一个 Android 应用程序,我想从 CSV 文件中读取数据并将其显示在一些 Textviews 中。最后一列可以包含较大的文本,其中包含换行符。

我正在读取到字符串数组的示例 CSV 行:

Cat1; Cat2; Sample Text\nwith a line break

将字符串设置为textview的文本后,我会在设备/模拟器上得到这个:

示例文本\n带换行符

如果我直接这样设置字符串:

textView.setText("Sample Text\nwith a line break");

或者,如果我像这样更换不同的占位符:
(CSV 中的字符串:带有换行符的示例 Textzzz)

textView.setText(someArray[2].replace("zzz", "\n"));

它会给我想要的结果:

示例文本
有一个换行符

我也试过 .replace("\n", "\n") 但这也没有帮助。
我究竟做错了什么?这可能是一些基本的东西。
我自己提供了 CSV,所以我也可以更改其中的内容。

提前致谢。

编辑1: 这就是我将 CSV 读取到字符串数组的方式

int choosenfile = getResources().getIdentifier("test", "raw", getPackageName());
InputStream is = getResources().openRawResource(choosenfile);
BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));

String line = "";
    try{
        while ((line = reader.readLine()) != null) {
            String[] tokens = line.split(";", -1);
            someArray[0] = tokens[0];
            someArray[1] = tokens[1];
            someArray[2] = tokens[2];
        }
    } catch (IOException e1) {
        Log.e("MainActivity", "Error" + line, e1);
        e1.printStackTrace();
            }

【问题讨论】:

  • 您的 CSV 文件是否包含 \ 字符后跟 n 字符?您可能需要编辑文件以用换行符替换它,并确保正确引用它,以便换行符不会开始新的 CSV 行。或者使用.replace("\\n", "\n") 将这对字符替换为换行符。
  • 在示例中,我在“Text”和“with”之间有 \n。不确定如何或在哪里引用 CSV。我也试过那个 .replace("\\n", "\n") ,没用。
  • row that I'm reading to a string array 你只是在展示你是如何从 csv 文件中读取数据的,所以我们无能为力。
  • Cat1; Cat2; Sample Text\nwith a line break 这不是 csv 文件的有效内容/行。你至少应该有Cat1;Cat2;"Sample Text\nwith a line break"
  • @blackapps 我添加了那部分。报价也无济于事。它也只是给了我关于输出的引号

标签: android csv line-breaks


【解决方案1】:

给定一个文件res/raw/data.csv,内容如下:

Cat1; Cat2; Sample Text\nwith a line break

还有下面的Java代码

String[] someArray = new String[3];

InputStream is = getResources().openRawResource(R.raw.data);
BufferedReader reader = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));

String line = "";
try{
    while ((line = reader.readLine()) != null) {
        String[] tokens = line.split(";", -1);
        someArray[0] = tokens[0];
        someArray[1] = tokens[1];
        someArray[2] = tokens[2];
    }
} catch (IOException e1) {
    Log.e("MainActivity", "Error" + line, e1);
    e1.printStackTrace();
}


TextView tv = findViewById(R.id.textView);
tv.setText(someArray[2].replace("\\n", "\n"));

它按预期工作。

但您可能需要考虑以下事项以轻松处理 CSV 文件:https://stackoverflow.com/a/43055945/2232127


此外,您当前的循环将在每次迭代时覆盖someArray,从而仅包含文件中最后一行的数据。还要确保在使用完流后关闭它们。

【讨论】:

  • 我刚刚复制了 .replace 部分,现在它可以工作了。我敢肯定,我通过手动输入两个反斜杠尝试了几次。我不知道那里出了什么问题,但谢谢。循环不用管,本来就是一个二维数组。
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2017-08-07
  • 2012-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多