如何在分割字符串后精确修剪1个空格

时间:2016-07-21 08:03:47

标签: c# string split trim

我创建了一个程序,通过在管道中拆分字符串来计算字符串,字符串是随机生成的,有时空格是需要评估的部分。

  

HftiVfzRIDBeotsnU uabjvLPC | LstHCfuobtv eVzDUBPn jIRfai

这个字符串两侧的长度相同(管道左侧2 x空格),但是当我必须修剪管道两侧的空间时(我在拆分后这样做),我的问题就来了 是否有某种方法可以确保我只修剪1个单独的空间而不是全部空间。 我的代码到目前为止:

foreach (string s in str)
    {
        int bugCount = 0;
        string[] info = s.Split('|');
        string testCase = info[0].TrimEnd();
        char[] testArr = testCase.ToCharArray();
        string debugInfo = info[1].TrimStart();
        char[] debugArr = debugInfo.ToCharArray();
        int arrBound = debugArr.Count();
        for (int i = 0; i < arrBound; i++)
            if (testArr[i] != debugArr[i])
                bugCount++;
        if (bugCount <= 2 && bugCount != 0)
            Console.WriteLine("Low");
        if (bugCount <= 4 && bugCount != 0)
            Console.WriteLine("Medium");
        if (bugCount <= 6 && bugCount != 0)
            Console.WriteLine("High");
        if (bugCount > 6)
            Console.WriteLine("Critical");
        else 
            Console.WriteLine("Done");

    }
    Console.ReadLine();

3 个答案:

答案 0 :(得分:4)

您有2个选项。

  1. 如果管道前后有始终 1个空格,请在{space}|{space}上拆分。

    myInput.Split(new[]{" | "},StringSplitOptions.None);
    
  2. 否则,请使用TrimStart()&amp; TrimEnd()使用SubString

    var split = myInput.Split('|');
    var s1 = split[0].EndsWith(" ") 
                     ? split[0].SubString(0,split[0].Length-1) 
                     : split[0];
    var s2 = split[1].StartsWith(" ")
                     ? split[1].SubString(1) // to end of line
                     : split[1];
    
  3. 注意,这里有一些复杂性 - 如果管道周围没有空间,但是最后/第一个字符是合法(数据)空格字符,上面的内容会将其剪掉。你需要更多的逻辑,但希望这会让你开始!

答案 1 :(得分:0)

在删除一些字符后,无法告诉Trim..方法系列停止。

一般情况下,您需要通过检查Split之后获得的部件并检查其第一个/最后一个字符和子字符串来获取正确的部分来手动完成。

然而,在你的情况下,有一个更简单的方法 - 分裂也可以将string作为参数,甚至更多 - 一组字符串:

string[] info = s.Split(new []{ " | " });
// or even
string[] info = s.Split(new []{ " | ", " |", "| ", "|" });

这应该通过简单地将它们作为分隔符的一部分来处理管道|字符周围的单个空格。

答案 2 :(得分:0)

这是一个字符串扩展,用于修改计数时间的空间,以防万一。

public static class StringExtension
{
    /// <summary>
    /// Trim space at the end of string for count times
    /// </summary>
    /// <param name="input"></param>
    /// <param name="count">number of space at the end to trim</param>
    /// <returns></returns>
    public static string TrimEnd(this string input, int count = 1)
    {
        string result = input;
        if (count <= 0)
        {
            return result;
        }
        if (result.EndsWith(new string(' ', count)))
        {
            result = result.Substring(0, result.Length - count);
        }
        return result;
    }
    /// <summary>
    /// Trim space at the start of string for count times
    /// </summary>
    /// <param name="input"></param>
    /// <param name="count">number of space at the start to trim</param>
    /// <returns></returns>
    public static string TrimStart(this string input, int count = 1)
    {
        string result = input;
        if (count <= 0)
        {
            return result;
        }
        if (result.StartsWith(new string(' ', count)))
        {
            result = result.Substring(count);
        }
        return result;
    }
}

主要

static void Main(string[] args)
{
   string a = "1234  ";
   string a1 = a.TrimEnd(1); // returns "1234 "
   string a2 = a.TrimEnd(2); // returns "1234"
   string a3 = a.TrimEnd(3); // returns "1234  "

   string b = "  5678";
   string b1 = b.TrimStart(1); // returns " 5678"
   string b2 = b.TrimStart(2); // returns "5678"
   string b3 = b.TrimStart(3); // returns "  5678"
}