我知道如果你做的话
myTextView.setText("This is on first line \n This is on second line");
然后它会像这样正确显示:
这是在第一行上 这是在第二行
当我将该字符串存储在数据库中然后将其设置为视图时,它显示为:
这是在第一行\ n这是在第二行
以下是我用来从数据库中提取字符串的代码行:
factView.setText(factsCursor.getString(MyDBAdapter.FACT_COLUMN));
我只是从一个文本文件中填充数据库,其中每一行都是表中的新条目,因此一行看起来像这样“这是在第一行\ n这是在第二行”,它存储为文本。
是否有正确显示\ n字符的原因?它必须与数据库中的字符串有关。有什么建议吗?
答案 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
您必须在填充字段之前设置标记。