首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >替换单个WhiteSpace而不替换多个WhiteSpace

替换单个WhiteSpace而不替换多个WhiteSpace
EN

Stack Overflow用户
提问于 2016-02-15 15:18:26
回答 5查看 279关注 0票数 4

我有一个格式的字符串:abc def ghi xyz

我想以格式结束:abcdefghi xyz

做这件事最好的方法是什么?在这种特殊情况下,我可以去掉最后三个字符,删除空格,然后将它们添加回末尾,但是对于多个空格位于字符串中间的情况,这是行不通的。

简而言之,我希望删除所有单个空白空间,然后将所有多个空白空间替换为一个空白空间。这些步骤中的每一步本身都很简单,但合并起来似乎就不那么简单了。

我愿意使用正则表达式,但我不希望使用正则表达式。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-02-15 15:25:41

这种方法使用正则表达式,但希望以一种仍然相当可读的方式。首先,将输入字符串拆分到多个空格上。

代码语言:javascript
复制
var pattern = @"  +"; // match two or more spaces
var groups = Regex.Split(input, pattern);

接下来,从每个令牌中删除(单独的)空格:

代码语言:javascript
复制
var tokens = groups.Select(group => group.Replace(" ", String.Empty));

最后,用单个空格连接令牌。

代码语言:javascript
复制
var result = String.Join(' ', tokens.ToArray());

本例使用文字空格字符而不是‘空格’(其中包括制表符、行提要等)--如果需要拆分多个空格字符而不是实际空格,则用\s代替‘’。

票数 4
EN

Stack Overflow用户

发布于 2016-02-15 15:23:03

在这里,正则表达式可能是最快的,但是您可以实现一些算法,使用对单个空格的展望,然后在一个循环中替换多个空格:

代码语言:javascript
复制
// Replace all single whitespaces
for (int i = 0; i < sourceString.Length; i++)
{
    if (sourceString[i] = ' ')
    {
        if (i < sourceString.Length - 1 && sourceString[i+1] != ' ')
          sourceString = sourceString.Delete(i);
    }
}

// Replace multiple whitespaces
while (sourceString.Contains("  ")) // Two spaces here!
  sourceString = sourceString.Replace("  ", " ");

但是,与正常的正则表达式相比,这个代码非常丑陋和缓慢.

票数 2
EN

Stack Overflow用户

发布于 2016-02-15 15:42:51

对于非REGEX选项,可以使用:

代码语言:javascript
复制
string str = "abc def ghi         xyz";
var result = str.Split(); //This will remove single spaces from the result
StringBuilder sb = new StringBuilder();
bool ifMultipleSpacesFound = false;
for (int i = 0; i < result.Length;i++)
{
    if (!String.IsNullOrWhiteSpace(result[i]))
    {
        sb.Append(result[i]);
        ifMultipleSpacesFound = false;
    }
    else
    {
        if (!ifMultipleSpacesFound)
        {
            ifMultipleSpacesFound = true;
            sb.Append(" ");
        }
    }
}

string output = sb.ToString();

产出如下:

代码语言:javascript
复制
output = "abcdefghi xyz"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35412915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档