如何消除string中的所有换行符?
我有一个需要摆脱出现在我的string(来自数据库)的所有换行符。 我用下面的代码来做:
value.Replace("\r\n", "").Replace("\n", "").Replace("\r", "")
我可以看到,至less有一个angular色像行结局一样活了下来。 char代码是8232 。
这是我的跛脚,但我必须说这是我第一次看到这个字符。 很明显,我可以直接replace这个字符,但是我正在考虑将当前的方法(基于replace“\ r”和“\ n”的组合)扩展到更稳固的方面,所以不仅包括“ 8232'字符,但还没有find所有其他人。
你有这样一个问题的防弹方法吗?
编辑#1:
在我看来,有几个可能的解决scheme:
- 使用Regex.Replace
- 删除所有字符,如果它是IsSeparator或IsControl
- 如果是IsWhiteSpace,则replace为“”
- 创build一个所有可能行结束的列表(“\ r \ n”,“\ r”,“\ n”,LF,VT,FF,CR,CR + LF,NEL,LS,PS)串。 这是很多替代。
我会说在应用第一种和第四种方法之后最好的结果是,但是我不能决定哪个更快。 你认为哪一个是最完整的?
编辑#2
我在下面张贴了。
以下是解决我的问题的扩展方法。 LineSeparator和ParagraphEnding当然可以在其他地方定义,如静态值等。
public static string RemoveLineEndings(this string value) { if(String.IsNullOrEmpty(value)) { return value; } string lineSeparator = ((char) 0x2028).ToString(); string paragraphSeparator = ((char)0x2029).ToString(); return value.Replace("\r\n", string.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty).Replace(lineSeparator, string.Empty).Replace(paragraphSeparator, string.Empty); }
根据维基百科 ,你可能需要处理很多行结束符(包括你提到的这个)。
LF:换行,U + 000A
VT:垂直标签,U + 000B
FF:换页,U + 000C
CR:回车,U + 000D
CR + LF:CR(U + 000D)其次是LF(U + 000A)
NEL:下一行,U + 0085
LS:行分隔符,U + 2028
PS:段落分隔符,U + 2029
8232(0x2028)和8233(0x2029)是唯一可能需要消除的其他选项。 请参阅char.IsSeparator的文档。
我build议删除所有的空白(char.IsWhitespace),并用单个空间replace它。IsWhiteSpace照顾所有奇怪的Unicode空格。
对这个Yossarian道具,我认为他是对的。 用一个空格replace所有的空格:
data = Regex.Replace(data, @"\s+", " ");
这是我的第一次尝试,但我认为这将做你想要的….
var controlChars = from c in value.ToCharArray() where Char.IsControl(c) select c; foreach (char c in controlChars) value = value.Replace(c.ToString(), "");
此外,请参阅此链接以获取有关可以使用的其他方法的详细信息: Char方法
你有没有尝试过string.Replace(Environment.NewLine, "")
? 这通常会为我获得很多。
假设8232是unicode,你可以这样做:
value.Replace("\u2028", string.Empty);
看看这个链接: http : //msdn.microsoft.com/en-us/library/844skk0h.aspx
你将有玩耍,并build立一个REGEXexpression式适合你。 但这是骨架…
static void Main(string[] args) { StringBuilder txt = new StringBuilder(); txt.Append("Hello \n\n\r\t\t"); txt.Append( Convert.ToChar(8232)); System.Console.WriteLine("Original: <" + txt.ToString() + ">"); System.Console.WriteLine("Cleaned: <" + CleanInput(txt.ToString()) + ">"); System.Console.Read(); } static string CleanInput(string strIn) { // Replace invalid characters with empty strings. return Regex.Replace(strIn, @"[^\w\.@-]", ""); }
亲自我会去
public static String RemoveLineEndings(this String text) { StringBuilder newText = new StringBuilder(); for (int i = 0; i < text.Length; i++) { if (!char.IsControl(text, i)) newText.Append(text[i]); } return newText.ToString(); }
如果你有一个string说“theString”然后使用方法replace,并给它的参数如下所示:
theString = theString.Replace(System.Environment.NewLine, "");