Does C# have built-in support for parsing page-number strings?

前端 未结 11 978
隐瞒了意图╮
隐瞒了意图╮ 2020-12-14 18:09

Does C# have built-in support for parsing strings of page numbers? By page numbers, I mean the format you might enter into a print dialog that\'s a mixture of comma and das

11条回答
  •  余生分开走
    2020-12-14 19:06

    Keith's approach seems nice. I put together a more naive approach using lists. This has error checking so hopefully should pick up most problems:-

    public List parsePageNumbers(string input) {
      if (string.IsNullOrEmpty(input))
        throw new InvalidOperationException("Input string is empty.");
    
      var pageNos = input.Split(',');
    
      var ret = new List();
      foreach(string pageString in pageNos) {
        if (pageString.Contains("-")) {
          parsePageRange(ret, pageString);
        } else {
          ret.Add(parsePageNumber(pageString));
        }
      }
    
      ret.Sort();
      return ret.Distinct().ToList();
    }
    
    private int parsePageNumber(string pageString) {
      int ret;
    
      if (!int.TryParse(pageString, out ret)) {
        throw new InvalidOperationException(
          string.Format("Page number '{0}' is not valid.", pageString));
      }
    
      return ret;
    }
    
    private void parsePageRange(List pageNumbers, string pageNo) {
      var pageRange = pageNo.Split('-');
    
      if (pageRange.Length != 2)
        throw new InvalidOperationException(
          string.Format("Page range '{0}' is not valid.", pageNo));
    
      int startPage = parsePageNumber(pageRange[0]),
        endPage = parsePageNumber(pageRange[1]);
    
      if (startPage > endPage) {
        throw new InvalidOperationException(
          string.Format("Page number {0} is greater than page number {1}" +
          " in page range '{2}'", startPage, endPage, pageNo));
      }
    
      pageNumbers.AddRange(Enumerable.Range(startPage, endPage - startPage + 1));
    }
    

提交回复
热议问题