如何从String中删除所有空格字符?

时间:2017-09-22 11:56:35

标签: c# string whitespace

亲爱的程序员,

我正在使用C#Visual Studio 2013编写代码,我刚刚意识到在执行Trim()时我可能不需要使用Replace(" ", string.Empty)

以下是一个例子:

SanitizedString = RawString
    .Replace("/", string.Empty)
    .Replace("\\", string.Empty)
    .Replace(" ", string.Empty)
    .Trim();

由于我以前的代码结构不同,我没有注意到它:

SanitizedString = RawString.Trim()
    .Replace("/", string.Empty)
    .Replace("\\", string.Empty)
    .Replace(" ", string.Empty);

我知道这些方法的工作方式不同,因为Trim()会删除所有空格字符,而Replace(" ", string.Empty)只会删除空格字符。

这就是为什么我有一个不同的问题。

我没有看到任何明显的方法来实现替换。我的问题是,当我希望从字符串中删除所有空白字符时,我将如何处理它?<​​/ p>

我发现了以下内容:

Efficient way to remove ALL whitespace from String?

但由于我从未使用正则表达式,我对如何将其应用于字符串犹豫不决?

7 个答案:

答案 0 :(得分:14)

尝试使用 Linq 过滤掉空格:

  using System.Linq;

  ... 

  string source = "abc    \t def\r\n789";
  string result = string.Concat(source.Where(c => !char.IsWhiteSpace(c)));

  Console.WriteLine(result);

结果:

abcdef789

答案 1 :(得分:5)

一种方法是使用正则表达式

public static string ReplaceAllWhiteSpaces(string str) {
  return Regex.Replace(str, @"\s+", String.Empty);
}

取自:https://codereview.stackexchange.com/questions/64935/replace-each-whitespace-in-a-string-with-20

答案 2 :(得分:2)

这个问题的答案并不像看起来那么容易。问题不是实际编码替换,而是定义空白区域。

例如,this Wikipedia article列出了许多具有Unicode属性WSpace的字符(Unicode代码点),以及许多相关字符,大多数人会认为这些字符是空格,但不是拥有WSpace属性。

鉴于此,我永远不会依赖某些正则表达式解析器认为\s的内容,因为这实际上并不是标准化的。我很确定C#的正则表达式解析器不会将U+2001之类的代码点视为空格,因此不会从字符串中删除它们。

这对您的申请可能有问题,也可能不是问题;它取决于你必须处理的字符串是如何被首先过滤的。但是如果要处理外语字符串(换句话说:包含ASCII范围之外字符的字符串),你将不得不考虑它。

这样做时,请记住正则表达式很慢。如果你需要定义你自己的替换品(由于上面提到的原因),你应该使用更轻量级的替换功能(如果C#或其组件提供一个 - 我不使用C#,所以我不喜欢知道)。

答案 3 :(得分:1)

只需传递方法调用中的字符串,它将返回不带空格的字符串。

import React, { Component } from 'react';
import { Layout } from 'antd';
import SideMenu from './side-menu';
import MainHeader from './main-header';
import MainFooter from './main-footer';

const { Content } = Layout;

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      collapsed: false,
    };
  }

  toggle = () => {
    this.setState({
      collapsed: !this.state.collapsed,
    });
  }

  render() {
    return (
      <Layout style={{ minHeight: '100vh' }}>
        <SideMenu collapsed={this.state.collapsed}/>
        <Layout>
          <MainHeader triggerParentUpdate={this.toggle} collapsed={this.state.collapsed}/>
          <Content style={{ margin: '24px 16px', padding: 24, background: '#ffffff', minHeight: 280 }}>
            {this.props.children}
          </Content>
          <MainFooter/>
        </Layout>
      </Layout>
    );
  }
}

export default App;

答案 4 :(得分:1)

对于任何访问此页面的人,都有一篇出色的CodeProject文章,作者在此对几种不同的解决方案进行了基准测试。他提出的最快的完全托管的解决方案(基本上)是:

public static string RemoveAllWhitespace(string str) {
    var len = str.Length;
    var src = str.ToCharArray();
    var dstIdx = 0;
    for (var i = 0; i < len; i++) {
        var ch = src[i];
        switch (ch) {
            case '\u0020': case '\u00A0': case '\u1680': case '\u2000': case '\u2001':
            case '\u2002': case '\u2003': case '\u2004': case '\u2005': case '\u2006':
            case '\u2007': case '\u2008': case '\u2009': case '\u200A': case '\u202F':
            case '\u205F': case '\u3000': case '\u2028': case '\u2029': case '\u0009':
            case '\u000A': case '\u000B': case '\u000C': case '\u000D': case '\u0085':
                break;
            default:
                src[dstIdx++] = ch;
                break;
        }
    }
    return new string(src, 0, dstIdx);
}

对于什么是正确的空白字符集,当然有很多警告和意见分歧,但是基本信息非常有用(例如RegEx到目前为止是最慢的)。

此处全文:https://www.codeproject.com/Articles/1014073/Fastest-method-to-remove-all-whitespace-from-Strin

注意:我与作者或CodeProject没有任何隶属关系。我只是通过普通的网络搜索找到这篇文章的。

答案 5 :(得分:0)

   string Abcd = Console.ReadLine();
        string wspace = "";
                    int len = Abcd.Length;
        for (int i = 0; i <= len-1; i++)
        {
            if (Abcd[i] != ' ')
            {
                wspace = wspace + Abcd[i];
            }

        }
        Console.WriteLine("The Sring Without Space Is= '"+wspace+"'");
        Console.ReadLine();

答案 6 :(得分:0)

这可能很方便:

string message = Console.ReadLine().Trim().ToLower();

string message_without_space = message.Split(' ').Aggregate((a, b) => a + b).ToString();