【问题标题】:Can I limit the number of times a character appears in a string?我可以限制字符在字符串中出现的次数吗?
【发布时间】:2019-12-03 21:52:49
【问题描述】:

例如,我有一个字符串,我只希望字符“

【问题讨论】:

  • 是的。这是可能的。
  • 确定;您可以继续使用 IndexOf 来查找它是否存在 10 次,或者您可以编写一个正则表达式,或者您可以“拆分”它,或者...

标签: c# string char substring


【解决方案1】:

Regex.Matches 可用于统计字符串中某个模式出现的次数。
它还引用每个出现的位置,Capture.Index 属性。
您可以阅读 Nth 出现的索引并在那里剪切您的字符串:
RegexOptions 是为了防止模式不同。根据需要进行修改。)

int cutAtOccurrence = 10;
string input = "one<two<three<four<five<six<seven<eight<nine<ten<eleven<twelve<thirteen<fourteen<fifteen";

var regx = Regex.Matches(input, "<", RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);
if (regx.Count >= cutAtOccurrence) {
    input = input.Substring(0, regx[cutAtOccurrence - 1].Index);
}

input 现在是:

one<two<three<four<five<six<seven<eight<nine<ten

如果您需要多次使用此过程,最好构建一个返回StringBuilder 的方法。

【讨论】:

    【解决方案2】:

    您可以使用TakeWhile 来达到您的目的,给定字符串s,您的角色&lt;c,您的计数10count,以下函数将解决您的问题:

    public static string foo(string s, char c, int count)
    {
        var i = 0;
        return string.Concat(s.TakeWhile(x => (x == c ? i++ : i) < count));
    }
    

    【讨论】:

      【解决方案3】:

      手动解决方案可能如下所示:

      class Program
      {
          static void Main(string[] args)
          {
      
              int maxNum = 10;
              string initialString = "a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<y<z";
              string[] splitString = initialString.Split('<');
              string result = "";
              Console.WriteLine(splitString.Length);
              if (splitString.Length > maxNum)
              {
                  for (int i = 0; i < maxNum; i++) {
                      result += splitString[i];
                      result += "<";
                  }
              }
              else
              {
                  result = initialString;
              }
      
              Console.WriteLine(result);
              Console.ReadKey();
          }
      }
      

      顺便说一句,尝试使用Regex可能会更好(以防您将来可能有其他替换规则,或者需要进行更改等)。但是,鉴于您的问题,类似的方法也可以。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 2018-04-02
        • 1970-01-01
        • 2010-10-20
        • 1970-01-01
        相关资源
        最近更新 更多