【问题标题】:Trim() and Replace(" ", "") not removing white space in C#Trim() 和 Replace(" ", "") 不删除 C# 中的空格
【发布时间】:2021-10-06 09:57:49
【问题描述】:

我正在尝试将“文本”写入文件

private void WriteToLogs(string text)
    {
        File.AppendAllText(todayMessageLog, $"({DateTime.Now}) Server Page: \"{text.Trim()}\"\n");
    }

文本如下: “文本(一堆空白)”

文本字符串由以下部分组成:

string username = e.NewClientUsername.Trim().Replace(" ", "");
string ip = e.NewClientIP.Trim().Replace(" ", "");

WriteToLogs($"{username.Trim().Replace(" ", "")} ({ip.Trim().Replace(" ", "")}) connected"); // NONE OF THESE WORKED FOR REMOVING THE WHITE SPACE

“e”参数来自另一个命名空间中的自定义 EventArgs 类,NewClientIP 和 NewClientUsername 是该类中的属性

如您所见,我尝试在字符串本身和方法上同时使用 Trim 和 Replace,但没有任何内容可以删除空格。

【问题讨论】:

  • 文本如下:“文本(一堆空白)” - 你能提供空白的准确表示吗?不是它是如何打印的,而是它是由什么字符组成的。
  • 我无法在我的帖子中提供它,因为 stackoverflow 会修剪文本,但我想我可以解释一下,它显示为:(2021 年 7 月 31 日上午 1:15:16)服务器页面:“ soxketsUser: sfa "(如果看不到空格,"sfa"后面有48个空格)
  • 我问是因为您说替换空格的代码“不起作用”。在我看来,有两种可能性 - 代码实际上没有被调用(这似乎与您的问题代码不同。y)或空白实际上不是“空格”。您可以创建一个最小的代码示例来重现该问题吗?如果 SO 上的代码格式不允许这样做,您可以链接到外部代码站点,例如 dotnetfiddle.net
  • 尝试使用类似BitConverter.ToString(System.Text.Encoding.UTF8.GetBytes(text)) 的内容打印结果。空字符很可能不是空格(将显示为 20-20-20-...),而是其他字符。
  • @demented Just Trim()/Replace() with '\0', '\x00', "\0" etc.

标签: c# string whitespace trim removing-whitespace


【解决方案1】:

我希望这对你有用

using System;
using System.Text.RegularExpressions;
                    
public class Program
{
    public static void Main()
    {
    //This is your text 
    string input = "This is   text with   far  too   much   "+
        "This is   text with   far  too   much   "+
        "This is   text with   far  too   much   ";
        
      //This is the Regex
      string pattern = "\\s";
        
      //Value with the replace
      string replacement = "";
        
      //Replace 
      string result = Regex.Replace(input, pattern, replacement);
      
      //Result
      Console.WriteLine("Original String: {0}", input);
      Console.WriteLine("Replacement String: {0}", result);         
    }
}

【讨论】:

    【解决方案2】:

    如果Trim()Replace() 方法不起作用,则该字符串可能没有用通常的空格字符(如SPACE 或TAB)填充,而是用其他字符填充。还有许多其他字符可以显示为空白。

    尝试使用BitConverter.ToString(Text.Encoding.UTF8.GetBytes(text)) 之类的内容打印结果。空格会显示为 20-20-20-...,但您可能会得到其他内容。


    空白显示为 00,而不是 20,如何删除?

    很好。使用Trim() 方法的参数,如下所示:

    var text = "Blah\0\0\0\0";
    text.Length            → 8
    text.Trim('\0').Length → 4
    

    【讨论】:

    • 成功了,非常感谢您
    【解决方案3】:

    如果你想修剪空白(不仅是' ',还有\t\U00A0 等)以及\0(这是不是 em> 空格),你可以试试正则表达式

    using System.Text.RegularExpressions;
    
    ...
    
    // Trim whitespaces and \0
    string result = Regex.Replace(input, @"(^[\s\0]+)|([\s\0]+$)", "");
    

    供参考

    // Trim start whitespaces and \0
    string resultStart = Regex.Replace(input, @"^[\s\0]+", "");
    
    // Trim end whitespaces and \0
    string resultEnd = Regex.Replace(input, @"[\s\0]+$", "");
    

    相同的想法(正则表达式),但如果您不想修剪删除空格和\0

    string result = Regex.Replace(input, @"[\s\0]+", "");
    

    【讨论】: