Best way to split string by last occurrence of character?

前端 未结 4 824
情话喂你
情话喂你 2020-12-28 11:49

Let\'s say I need to split string like this:

Input string: \"My. name. is Bond._James Bond!\" Output 2 strings:

  1. \"My. name. is Bond\"
  2. \"_James
相关标签:
4条回答
  • 2020-12-28 12:10
    string[] theSplit = inputString.Split('_'); // split at underscore
    string firstPart = theSplit[0]; // get the first part
    string secondPart = "_" + theSplit[1]; // get the second part and concatenate the underscore to at the front
    

    EDIT: Following from the comments; this only works if you have one instance of the underscore character in your input string.

    0 讨论(0)
  • 2020-12-28 12:16

    You can also use a little bit of LINQ. The first part is a little verbose, but the last part is pretty concise :

    string input = "My. name. is Bond._James Bond!";
    
    string[] split = input.Split('.');
    string firstPart = string.Join(".", split.Take(split.Length - 1)); //My. name. is Bond
    string lastPart = split.Last(); //_James Bond!
    
    0 讨论(0)
  • 2020-12-28 12:26
    string s = "My. name. is Bond._James Bond!";
    int idx = s.LastIndexOf('.');
    
    if (idx != -1)
    {
        Console.WriteLine(s.Substring(0, idx)); // "My. name. is Bond"
        Console.WriteLine(s.Substring(idx + 1)); // "_James Bond!"
    }
    
    0 讨论(0)
  • 2020-12-28 12:26
    1. Assuming you only want the split character to appear on the second and greater split strings...
    2. Assuming you want to ignore duplicate split characters...
    3. More curly braces... check...
    4. More elegant... maybe...
    5. More fun... Heck yeah!!

      var s = "My. name. is Bond._James Bond!";
      var firstSplit = true;
      var splitChar = '_';
      var splitStrings = s.Split(new[] { splitChar }, StringSplitOptions.RemoveEmptyEntries)
          .Select(x =>
          {
              if (!firstSplit)
              {
                  return splitChar + x;
              }
              firstSplit = false;
              return x;
          });
      
    0 讨论(0)
提交回复
热议问题