如何在字符串中跳过`\r \n`?

5
我正在开发一个简单的转换器,将文本转换成另一种语言。假设我有两个文本框,在第一个文本框中输入单词“Index”,然后按下转换按钮。
我将用乌尔都语中“Index”的替代词“فہرست”来替换您的文本,但是如果您输入单词“index”并添加一些空格或回车,则我会在C#中以这样的形式获取该文本框的文本:Index \r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n。现在我该怎么办才能摆脱这个问题?我希望始终获取简单的Index
感谢您的答案,如果您有任何问题,请随时评论。
4个回答

9

如果新行只在开头或结尾,请尝试使用Trim方法:

input = input.Trim();

如果您想要在字符串中任何位置删除换行符,您可以使用Replace函数:

// Replace line break with spaces
input = input.Replace("\r\n", " ");
// (Optionally) Combine consecutive spaces to one space (probalby not most efficient but should work)
while (input.Contains("  ")) { input = input.Replace("  ", " "); }

如果你想完全防止换行,大多数文本框控件都有类似的属性,比如MultiLine,当设置了这个属性后,就会阻止输入超过一行。


如果你有一个像 Index Index 这样的单词,trim 就无法正常工作。 - Smartboy
@Smartboy 好的,那么使用替换功能会更好。已更新答案。 - Botz3000
但是如果你有index\r\nindex,输出将会是indexindex,我不确定翻译是否能很好地工作。 - Steve
@Steve 是的,没错,我把它改成了用空格替换,并且(可选)将连续的空格合并为一个。 - Botz3000

5

这应该足以删除由Char.IsWhiteSpace定义的空格(空格、换行等)。

string wordToTranslate = textBox1.Text.Trim();

然而,如果您的文本框包含多个单词,则应使用不同的方法。

string[] words = textBox1.Text.Split((char[]) null, StringSplitOptions.RemoveEmptyEntries);
foreach(string wordToTranslate in words)
    ExecTranslation(wordToTranslate);

使用 char[] null 作为分隔符的 Split 方法,可以将每个空白字符都视为有效的单词分隔符。

5

input.Replace(Environment.NewLine, string.Empty).Replace(" ", string.Empty);

使用Replace方法从字符串中删除字符,Trim仅移除开头和结尾处的字符。

该代码行用于将输入字符串中的换行符和空格删除。


4

将您想要忽略的所有字符添加到字符串中:

var cleanChars = text.Where(c => !"\n\r".Contains(c));
string cleanText = new string(cleanChars.ToArray());

那是因为字符串实现了 IEnumerable<char> 接口。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接