转到字符串中的每个空白处。C#

转到字符串中的每个空白处。C#,c#,string,C#,String,是否有可能通过一个字符串,找到空白 例如,以下数据集: string myString = "aa bbb cccc dd"; 我如何循环并检测每个空白,并操纵该空白 我需要以最有效的方式来做这件事 谢谢 更新: 我需要通过从整数值增加空格来操纵空格。例如,增加空间,使其有3个空格,而不是1个。我想让它在一个循环中通过每个空白,在.NET中已经有这样做的方法吗?我所说的空白是指一个“.”取决于您要做什么: for(int k = 0; k < myString.Length; k++)

是否有可能通过一个字符串,找到空白

例如,以下数据集:

string myString = "aa bbb cccc dd";
我如何循环并检测每个空白,并操纵该空白

我需要以最有效的方式来做这件事

谢谢

更新:

我需要通过从整数值增加空格来操纵空格。例如,增加空间,使其有3个空格,而不是1个。我想让它在一个循环中通过每个空白,在.NET中已经有这样做的方法吗?我所说的空白是指一个“.”

取决于您要做什么:

for(int k = 0; k < myString.Length; k++)
{
   if(myString[k].IsWhiteSpace())
   {
       // do something with it
   }
}
这里有一种用任意字符串替换所有空格的方法:

var rex = new System.Text.RegularExpressions.Regex("\\s+");
String replacement = "[white_space]";
// replaces all occurrences of white space with the string [white_space]
String result = rex.Replace(myString, replacement);

您可以使用
Regex.Replace
方法。这将用破折号替换任何一组空白字符:

myString = Regex.Replace(myString, "(\s+)", m => "-");
更新: 这将查找空格字符组并替换为三倍的空格:

myString = Regex.Replace(
  myString,
  "( +)",
  m => new String(' ', m.Groups[1].Value.Length * 3)
);
但是,使用正则表达式有点太简单了。您可以通过常规替换执行相同的操作:

myString = myString.Replace(" ", "   ");

这将替换替换组空格中的每个空格,但常规替换比正则表达式要简单得多。替换,因此它至少应该同样快,代码也更简单。

如果要一次性替换所有空格,可以执行以下操作:

var result = new StringBuilder();

foreach(Char c in myString)
{
   if (Char.IsWhiteSpace(c))
   {
       // you can do what you wish here. strings are immutable, so you can only make a copy with the results you want... hence the "result" var.

      result.Append('_'); // for example, replace space with _
   }
   else result.Append(c);

}

myString = result.ToString();
// changes all strings to dashes
myString.Replace(' ', '-');
如果您想逐案处理(即,不仅仅是大规模替换),可以循环使用
IndexOf()

更新

根据您的更新,您可以使用变量(如numSpaces)指定的空格数替换单个空格,如下所示:

myString.Replace(" ", new String(' ', numSpaces));

如果只想用其他字符替换所有空格:

myString = myString.Replace(' ', 'x');
如果您需要为每个人做不同的事情:

foreach(char c in myString)
{
    if (c == ' ')
    {
        // do something
    }
}
编辑:

根据您澄清问题的评论:

要将每个空间更改为三个空间,可以执行以下操作:

myString = myString.Replace(" ", "   ");

但是请注意,这并不考虑输入字符串已经有两个或更多空格的情况。如果这是一种可能性,您可能会希望使用正则表达式。

如果您希望将空白替换为,例如“uu”,您可以使用

例如:

string myString = "aa bbb cccc dd";
string newString = myString.Replace(" ", "_"); // gives aa_bbb_cccc_dd

下面的LINQ查询返回一组具有两个属性的匿名类型项——“sybmol”表示空白字符,“index”——输入序列中的索引。在输入序列中有了所有空白字符和一个位置之后,现在可以用它做任何事情了

string myString = "aa bbb cccc dd";
var res = myString.Select((c, i) => new { symbol = c, index = i })
                  .Where(c => Char.IsWhiteSpace(c.symbol));
编辑:出于教育目的,下面是您正在寻找的实现,但显然在实际系统中使用内置字符串构造函数和
string.Replace()
,如其他答案所示

string myString = "aa bbb cccc dd";
var result = this.GetCharacters(myString, 5);
string output = new string(result.ToArray());


public IEnumerable<char> GetCharacters(string input, int coeff)
{
    foreach (char c in input)
    {
        if (Char.IsWhiteSpace(c))
        {
            int counter = coeff;
            while (counter-- > 0)
            {
                yield return c;
            }
        }
        else
        {
            yield return c;
        }
    }
}
string myString=“aa bbb cccc dd”;
var result=this.GetCharacters(myString,5);
字符串输出=新字符串(result.ToArray());
公共IEnumerable GetCharacters(字符串输入,整数系数)
{
foreach(输入中的字符c)
{
if(Char.IsWhiteSpace(c))
{
int计数器=系数;
同时(计数器-->0)
{
收益率c;
}
}
其他的
{
收益率c;
}
}
}
使用
string.Replace()


如果您想
左/右对齐
字符串

int N=10;
string newstring = String.Join(
        "",
        myString.Split(' ').Select(s=>s.PadRight(N-s.Length)));

“检测”和“操纵”如何进行?您能否确定“可能的最有效方式”?您的问题域是什么?您可以使用String.IndexOf(“”)找到每个空间的索引,并将其分配给数组列表。你想要它的代码吗?但是像前面的评论员一样,如何操作?很难判断您想要做什么,但是您可以在空间上拆分字符串(使用string.split),然后根据需要使用结果。你到底想用空格做什么?你能解释一下“检测”空格是什么意思吗?是否要为每个空格的开头创建索引?另外,您对空格(空格、制表符、CR、LF)的定义是什么?此解决方案相对于String.Replace的优势在于正则表达式匹配空格组(和其他空格字符)-因此一行中的三个空格将折叠为单个“-”,而不是String.Replace中的“---”。+1因为我喜欢
regex.Replace
,但这不是最简单的解决方案(特别是考虑到这个问题)。我的意思是,你有正则表达式模式和lambda表达式。对于这样一个简单的情况,lambda是不需要的。这可能是回答问题的唯一答案。您可以在if语句中使用
Char.IsWhiteSpace
来匹配所有空格,然后“do something”会将字符附加到
StringBuilder
使用您的第二块代码,我是否能够将字符串填充到空白处,从整数值中提取我希望填充的数量?当然可以,如果操作StringBuilder对象的内容,请确保正确调整偏移。例如,如果你删除了字符,或者在空白处添加了字符,请确保在处理下一个空白处时考虑到这一点。我喜欢LINQ!
string myString = "aa bbb cccc dd";
var res = myString.Select((c, i) => new { symbol = c, index = i })
                  .Where(c => Char.IsWhiteSpace(c.symbol));
string myString = "aa bbb cccc dd";
var result = this.GetCharacters(myString, 5);
string output = new string(result.ToArray());


public IEnumerable<char> GetCharacters(string input, int coeff)
{
    foreach (char c in input)
    {
        if (Char.IsWhiteSpace(c))
        {
            int counter = coeff;
            while (counter-- > 0)
            {
                yield return c;
            }
        }
        else
        {
            yield return c;
        }
    }
}
string newString = myString.Replace(" ", "   ");
int N=10;
string newstring = String.Join(
        "",
        myString.Split(' ').Select(s=>s.PadRight(N-s.Length)));