如何移除字符串中第四个空格后的所有字符?技术问题求助
如何移除字符串中第四个空格后的所有字符?
我懂你想要的效果——把字符串里前四个空格分隔的内容保留下来,第四个空格之后的全部砍掉。你之前想用String.IndexOf的思路是对的,但代码里的写法没找对空格的位置,咱们来把这个问题解决掉!
先说说你原来代码的问题
你写的这段代码:
Result = source.Substring(source.IndexOf(string.Empty, source.IndexOf(string.Empty) + 3));
这里用string.Empty来查找是完全错误的,因为空字符串在字符串的任意位置都能匹配到,IndexOf(string.Empty)会直接返回0。所以你的代码实际是从索引3的位置开始截取子串,完全达不到“找第四个空格”的目的。
给你几个可行的解决方案
方案1:循环查找第四个空格的位置(最直观的底层实现)
逐个字符遍历字符串,数到第四个空格时记录它的索引,然后截取前半部分:
public static string TrimAfterFourthSpace(string source) { int spaceCounter = 0; int fourthSpaceIndex = -1; for (int i = 0; i < source.Length; i++) { if (source[i] == ' ') { spaceCounter++; if (spaceCounter == 4) { fourthSpaceIndex = i; break; } } } // 如果字符串里空格不足4个,直接返回原字符串 return fourthSpaceIndex == -1 ? source : source.Substring(0, fourthSpaceIndex); }
比如你的示例字符串AAD BCCD QWD SDKE DJQWEK DJT,这段代码会找到第四个空格的位置(索引15),然后截取0到15的子串,得到AAD BCCD QWD SDKE。
方案2:用Split+Join(最简洁的写法)
把字符串按空格分割成数组,取前4个元素再拼接回去,逻辑一目了然:
var splitParts = source.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); var result = splitParts.Length >= 4 ? string.Join(" ", splitParts.Take(4)) : source;
这里用StringSplitOptions.RemoveEmptyEntries是为了避免字符串里有连续空格时分割出空元素的情况,保证分割后的数组都是有效内容。
方案3:正则表达式(适合喜欢一行代码的场景)
用正则匹配出前四个空格分隔的部分:
using System.Text.RegularExpressions; var matchResult = Regex.Match(source, @"^(\S+\s+){3}\S+"); var result = matchResult.Success ? matchResult.Value : source;
正则表达式^(\S+\s+){3}\S+的含义是:从字符串开头,匹配3组“非空格字符+空格”,再加上一组非空格字符,正好对应前四个空格分隔的内容。
内容的提问来源于stack exchange,提问作者Seungjun Lee
相关产品推荐
相关产品推荐

