2010-06-17 108 views
0

我面临一些问题。该场景是我有一个多行文本框,我想将所有文本放入一个单一字符串中,其中没有任何新行。这是我的时刻:如何将多行文本框中的文本放入一个字符串中?

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

的问题是,无论我怎么努力,我做什么,总有一个新行(至少我认为?)在我的字符串,所以不是越来越:

“valuevaluevalue”

我得到:

“价值
价值
价值”。

我甚至试图用string.Replaceregex.Replace替代,但唉,无济于事。请指教。

此致,
凯文面包车Zanten表示

回答

7

新生产线需要 “\ r \ n”。更好 - 使用Environment.NewLine

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

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

在另一方面,如果你看到自己使用+=运营商在一根绳子上超过了几次,那么你或许应该使用一个StringBuilder。这是因为字符串是Immutable

+0

我已接近它完全错误呢。我没有改变''\ n“'的位置,而是搞乱了结果。你只是缓解了我的头痛,非常感谢你! – Fusyion 2010-06-17 11:08:19

2

试试这个

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

Doh!大卫在我面前到达了那里。 – Bablo 2010-06-17 10:56:25

+0

虽然仍然欣赏帮助,谢谢! – Fusyion 2010-06-17 11:09:01

4

注意,新的生产线可以达到两个字符取决于平台。

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

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

我会使用:

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

,取代独立的秩序两个字符的所有地方。

+0

好点,我从来没有理由考虑过之前。 +1 – 2010-06-17 11:06:49

+0

我会记住这一点,但对于目前的项目来说,这不是必需的。虽然谢谢! – Fusyion 2010-06-17 11:09:43

0

尝试这一个,以及

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

'tbxValueList.Text.Split(“\ r \ n”,StringSplitOptions。没有);'会做同样的事情。这不是OP所要做的,这只是他最初解决方案的一部分。 – 2010-06-17 11:15:12

相关问题