转到字符串中的每个空白处。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)));