新行字符\ n无法在textView Android中正确显示

时间:2010-08-27 17:35:47

标签: android sqlite textview

我知道如果你做的话

myTextView.setText("This is on first line \n This is on second line");

然后它会像这样正确显示:

  

这是在第一行上   这是在第二行

当我将该字符串存储在数据库中然后将其设置为视图时,它显示为:

  

这是在第一行\ n这是在第二行

以下是我用来从数据库中提取字符串的代码行:

factView.setText(factsCursor.getString(MyDBAdapter.FACT_COLUMN));

我只是从一个文本文件中填充数据库,其中每一行都是表中的新条目,因此一行看起来像这样“这是在第一行\ n这是在第二行”,它存储为文本。

是否有正确显示\ n字符的原因?它必须与数据库中的字符串有关。有什么建议吗?

5 个答案:

答案 0 :(得分:34)

我发现这个问题Austyn Mahoney的答案是正确的,但这里有一点帮助:

   private String unescape(String description) {
    return description.replaceAll("\\\\n", "\\\n");
}

description是来自SQLite DB的字符串

答案 1 :(得分:19)

正如Falmarri在他的评论中所说,你的字符串在被放入数据库时​​被转义。在将String s = unescape(stringFromDatabase)放入TextView之前,您可以尝试通过调用DatabaseUtils.sqlEscapeString()来取消字符串。

作为旁注,请确保在将数据插入数据库时​​,对来自用户或未知可更改源的任何类型的数据使用{{1}}。这样可以保护您免受错误的影响SQL Injection

答案 2 :(得分:1)

尝试使用\\n代替\n。如果它抛出异常而不是使用换行关键字代替\ n ....换行符是一个字符,ascii 10;它经常输入一个字符串文字...并将满足你的目的....:)

答案 3 :(得分:1)

"This is on first line"||x'0A'||"This is on second line"

||连接字符串,x'0A'是未转义的换行符。

如果您要插入记录,则必须使用"||x'0A'||"替换每个换行符(如果您的字符串是双引号)。与其他asnswers相比,这可能看起来很笨拙。但是,如果您的行位于不同的列中,则这也适用于选择:

SELECT firstline||x'0A'||secondline FROM wherever;

我遇到同样的问题时发现了这一点:http://www.mail-archive.com/sqlite-users@sqlite.org/msg43557.html

答案 4 :(得分:0)

文本区域可以是多行或单行模式。当它处于单行模式时,换行符'\ n'将被视为空格。如有疑问,要打开多行模式,可以使用以下代码:

    setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_MULTI_LINE);

我遇到的问题是,相同的代码在蜂窝和froyo上不起作用,这似乎有不同的默认值。我现在也要排除标志,因为我想强制一个字段单行。

来自Android doc:

  

public static final int TYPE_TEXT_FLAG_MULTI_LINE在API级别3中添加

     

TYPE_CLASS_TEXT的标志:可以输入多行文本   场。如果未设置此标志,则文本字段将为   限制在一条线上。常数值:131072(0x00020000)

http://developer.android.com/reference/android/text/InputType.html#TYPE_TEXT_FLAG_MULTI_LINE

您必须在填充字段之前设置标记。