【问题标题】:How can I put text from a multi-line text box into one string?如何将多行文本框中的文本放入一个字符串?
【发布时间】:2010-06-17 10:50:40
【问题描述】:

我遇到了一些问题。场景是我有一个多行文本框,我想将所有文本放入一个字符串中,没有任何新行。这就是我目前所拥有的:

string[] values = tbxValueList.Text.Split('\n');                
            foreach (string value in values)
            {
                if (value != "" && value != " " && value != null && value != "|")
                {
                    valueList += value;
                }
            }

问题是,无论我尝试什么以及做什么,我的字符串中总会有一个新行(至少我认为?),所以不是得到:

“价值价值价值”

我明白了:

“价值
价值
价值”。

我什至尝试用string.Replaceregex.Replace 替换,但可惜无济于事。请指教。

此致,
凯文·范·赞滕

【问题讨论】:

    标签: c# textbox split newline


    【解决方案1】:

    新行必须是“\r\n”。更好的是 - 使用Environment.NewLine

    虽然代码效率低下,但您正在创建大量不必要的字符串和不必要的数组。只需使用:

    tbxValueList.Text.Replace(Environment.NewLine, String.Empty);
    

    另一方面,如果您看到自己在字符串上多次使用+= 运算符,那么您可能应该使用StringBuilder。这是因为字符串是Immutable

    【讨论】:

    • 我当时完全错误地接近它。我没有更改"\n" 位,而是弄乱了结果。你刚刚减轻了我的头痛,非常感谢!
    【解决方案2】:

    请注意,根据平台的不同,新行最多可以包含两个字符。

    您应该同时替换 CR/回车 (ASCII 13) 和 LF/换行 (ASCII 10)。

    我不会像 David 建议的那样依赖本地化数据(除非这是您的意图);如果您从不同的环境(例如来自 Windows 客户端的数据库)获取文本字符串怎么办?

    我会使用:

    tbxValueList.Text.Replace((Char)13,"").Replace((Char)10,"");
    

    替换所有出现的两个字符,与顺序无关。

    【讨论】:

    • 好点,我以前从来没有理由考虑过。 +1
    • 我会记住这一点,但对于当前的项目,这不是必需的。不过谢谢!
    【解决方案3】:

    试试这个

    tbxValueList.Text.Replace(System.Environment.NewLine, "");
    

    【讨论】:

    • 噢!大卫在我之前到达那里。
    【解决方案4】:

    也试试这个

     string[] values = tbxValueList.Text.Replace("\r\n", " ").Split(' ');
    

    【讨论】:

    • tbxValueList.Text.Split("\r\n", StringSplitOptions.None); 会做同样的事情。这不是 OP 试图做的,这只是他最初解决方案的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多