我遇到了一些问题。方案是我有一个多行文本框,我想将所有文本放在一个单独的字符串中,没有其中的任何新行。这就是我现在所拥有的:
string[] values = tbxValueList.Text.Split('\n');
foreach (string value in values)
{
if (value != "" && value != " " && value != null && value != "|")
{
valueList += value;
}
}
问题是无论我尝试什么和我做什么,我的字符串总会有一个新行(至少我认为?),所以不要得到:
“valuevaluevalue”
我明白了:
“值
值
值”。
我甚至尝试用string.Replace
和regex.Replace
替换,但唉也无济于事。请指教。
您诚挚的,
Kevin van Zanten
答案 0 :(得分:7)
新行必须是“\ r \ n”。更好 - 使用Environment.NewLine
。
但是代码效率低下,你创建了许多不必要的字符串和一个不必要的数组。只需使用:
tbxValueList.Text.Replace(Environment.NewLine, String.Empty);
另一方面,如果您发现自己在字符串上使用+=
运算符的次数超过两次,那么您可能应该使用StringBuilder
。这是因为字符串是Immutable。
答案 1 :(得分:4)
请注意,新行最多可以包含两个字符,具体取决于平台。
您应该替换CR /回车符(ASCII 13)和LF /换行符(ASCII 10)。
我不会像大卫建议的那样依赖本地化数据(除非你的意图是这样);如果您从其他环境(例如来自Windows客户端的数据库)获取文本字符串该怎么办?
我会用:
tbxValueList.Text.Replace((Char)13,"").Replace((Char)10,"");
取代所有出现的两个字符而不依赖于顺序。
答案 2 :(得分:2)
试试这个
tbxValueList.Text.Replace(System.Environment.NewLine, "");
答案 3 :(得分:0)
尝试这个
string[] values = tbxValueList.Text.Replace("\r\n", " ").Split(' ');