1

我是 .net 网络表单的新手,所以任何人都可以帮助我。

如何在 asp.net 的字符串中找到第五个空格的位置?

我有

string s="aa bb cc dd ee ff gg hh ii kk"

所以我想让子字符串直到第五个空格,所以新字符串应该是:

"aa bb cc dd ee"
4

8 回答 8

9

要获取子字符串"aa bb cc dd ee"

String.Join(" ", "aa bb cc dd ee ff gg hh ii kk".Split(' ').Take(5))

并找到第五个空间的位置,就像你最初问的那样:

"aa bb cc dd ee ff gg hh ii kk".Split(' ').Take(5).Sum(a => a.Length + 1) - 1

解释:

  • .Split(' ')- 在空格上分割你的字符串,所以我们现在有一个string[]包含:aa, bb, cc, dd, ee, ff, gg, hh, ii, kk
  • .Take(5)- 取该数组的前五个元素IEnumerable<string>aa, bb, cc, dd, ee
  • .Sum(a => a.Length + 1)- 将各个元素的所有长度加在一起(在这种情况下,所有2并为由于拆分而​​丢失的空间加一
  • - 1删除空间的额外计数

另一种方法是获取.Length上面的子字符串。

于 2013-10-25T10:09:16.923 回答
4

您可以拆分字符串,只取前 5 个子字符串,然后将其重新连接在一起,如下所示:

string s = "aa bb cc dd ee ff gg hh ii kk";
string output = String.Join(" ", s.Split(new[] { ' ' }, 6).Take(5)); 
Console.WriteLine(output); // "aa bb cc dd ee"

或者对于更直接的方法,只需使用IndexOf直到找到所需的空格数:

string s = "aa bb cc dd ee ff gg hh ii kk";
var index = -1;
for (int i = 0; i < 5; i++)
{
    index = s.IndexOf(" ", index + 1);
}

string output = s.Remove(index);
Console.WriteLine(output); // "aa bb cc dd ee"
于 2013-10-25T10:08:37.800 回答
2

或者...

var nrOfBlanks = 0;
var firstFive = new String(s.TakeWhile(c => 
                                        (nrOfBlanks += (c == ' ' ? 1 : 0)) < 5)
                             .ToArray());

... 只是因为使用稍微过于复杂的 Linq 表达式的字符串操作感觉如此有趣和性感。

于 2013-10-25T10:44:29.193 回答
1

您可以使用String.Split类似的方法;

string s = "aa bb cc dd ee ff gg hh ii kk";
var array = s.Split( new string[] {" "}, StringSplitOptions.RemoveEmptyEntries);
string newstring = "";
for (int i = 0; i < 5; i++)
     newstring += array[i] + " ";
Console.WriteLine(newstring.Trim());

输出将是;

aa bb cc dd ee

这里一个Demonstration.

于 2013-10-25T10:12:04.903 回答
0

一个 linq 版本:

var fifthBlankIndex = s.Select((c, index) => new{ c, index })
 .Where(x => Char.IsWhiteSpace(x.c))
 .ElementAtOrDefault(4);

int result = -1;
if(fifthBlankIndex  != null)
    result = fifthBlankIndex.index;  // 14

Demo

编辑如果您只想使用前五个单词,这是一个完全不同的要求:

string fiveWords = string.Join(" ", s.Split().Take(5));
于 2013-10-25T10:10:41.337 回答
0

您可以使用 string.split(' ') 这将返回字符串数组。

string s = "aa bb cc dd ee ff gg hh ii kk";
//
// Split string on spaces.
// ... This will separate all the words.
//
string[] words = s.Split(' ');
foreach (string word in words)
{
    Console.WriteLine(word);
}

因此,一旦您获得数组,您就可以连接任意数量的单词。因此,在您的情况下,循环直到单词数组中的第 4 个索引,并在其间连接插入空白。

于 2013-10-25T10:10:41.930 回答
0

使用 Substring

string Requiredpart= s.Substring(0, s.IndexOf(' ', theString.IndexOf(' ') + 4));
于 2013-10-25T10:11:11.800 回答
0

您可以使用空白字符拆分

string[] words = s.Split(' ');

然后随心所欲地组合单词。

希望这个对你有帮助。尼古拉

于 2013-10-25T10:12:54.077 回答