C# 创建包含数字和字符的字符串序列

2024-04-06

我正在尝试创建一个数字序列 in string格式,一旦我到达"99999"我想使用继续序列前导字母.

Example:

"00000" -> "00100" -> "99999" -> "A0001" -> "A9999" -> "B0001" -> "ZZZZZ"

有没有一种简单的方法可以实现这一目标?

到目前为止我尝试过split my string数字和字母,然后我有一些代码检查数字是否达到最大值,如果达到可用的最大值,我添加一个字母。对我来说看起来不太优雅。


让我们来实现GetNextValue方法:对于一个given value (e.g. "A9999")我们计算next ("B0001"):

private static string GetNextValue(string value) {
  StringBuilder sb = new StringBuilder(value);

  // Digits only: 1239 -> 1240
  for (int i = value.Length - 1; i >= 0; --i) {
    if (sb[i] < '9') {
      sb[i] = (char)(sb[i] + 1);

      return sb.ToString();
    }
    else if (sb[i] >= 'A')
      break;
    else
      sb[i] = '0';
  }

  // 1st letter: 9999 -> A001
  if (sb[0] == '0') {
    sb[0] = 'A';

    if (sb[sb.Length - 1] == '0')
      sb[sb.Length - 1] = '1';

    return sb.ToString();
  }

  // Leading letters AZ999 -> BA001
  for (int i = value.Length - 1; i >= 0; --i) {
    if (sb[i] >= 'A') {
      if (sb[i] < 'Z') {
        sb[i] = (char)(sb[i] + 1);

        if (sb[sb.Length - 1] == '0')
          sb[sb.Length - 1] = '1';

        return sb.ToString();
      }
      else
        sb[i] = 'A';
    }
  }

  // All letters increment: ABCDZ -> ABCEA
  for (int i = 0; i < value.Length; ++i) {
    if (sb[i] == '0') {
      sb[i] = 'A';

      if (sb[sb.Length - 1] == '0')
        sb[sb.Length - 1] = '1';

      return sb.ToString();
    }
  }

  // Exhausting: ZZZZZ -> 00000
  return new string('0', value.Length);
}

如果你想枚举这些值:

private static IEnumerable<string> Generator(int length = 5) {
  string item = new string('0', length);

  do {
    yield return item;

    item = GetNextValue(item);
  }
  while (!item.All(c => c == '0'));
}

Demo:(让我们使用一个长度的字符串3)

Console.Write(string.Join(Environment.NewLine, Generator(3)));

Outcome: (27234项目总数;18769482项目如果length == 5)

000
001
002
...
009
010
...
999
A01
...
A99
B01
...
Z99
AA1
...
AA9
AB1
...
AZ9
BA1
...
ZZ9
AAA
AAB
AAC
...
AAZ
ABA
...
ZZY
ZZZ
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 创建包含数字和字符的字符串序列 的相关文章

随机推荐

  • 将 sinon 模拟与 nodeunit 一起使用

    我正在学习使用 sinon 与nodeunit https github com caolan nodeunit 专门做嘲笑 这推荐方法 http sinonjs org nodeunit 是使用正节点单元 https github com
  • 如何提取html注释和节点包含的所有html?

    我正在创建一个小型网络应用程序来帮助我管理和分析网站内容 而 cURL 是我最喜欢的新玩具 我已经弄清楚如何提取有关各种元素的信息 如何查找具有特定类的所有元素等 但我遇到了两个问题 见下文 我希望有一些漂亮的 xpath 答案 但如果我必
  • 如何将字符串中的元音更改为符号?

    我需要使用 C 将字符串中的元音更改为 我知道我需要使用 for 循环 并且我很确定我走在正确的轨道上 但我无法让它工作 这是我的代码 include
  • 用于计算拉力赛速度图的数据[重复]

    这个问题在这里已经有答案了 我正在开发一个项目 从拉力赛中提取数据并创建速度图表 我了解要使用的 REST Web 服务 API 是缺陷 迭代 分层需求和迭代累积流数据 但是您能否告诉我如何进行实际计算来计算特定项目的每次迭代速度 需要什么
  • 使用 Clang AST 打印函数的参数

    我想将参数传递给函数 例如 如果我接到电话 printf d d i j 输出应该是 d dij 我可以使用 RecursiveASTVisitor 中的 VisitCallExpr 进行函数调用 还能够获取参数数量和参数类型 但我不知道如
  • 使用 jQuery ajax 响应数据

    我正在使用 ajax post 并接收 html 形式的数据 我需要拆分数据并将数据片段放置在整个页面上 我将响应数据构建为类似的 p Hello there and Welcome p p First timer visiting our
  • Uploadify 在 Chrome 10 中突然完全停止工作

    我正在使用 Uploadify 来允许在我的网络应用程序中上传多个文件 它始终适用于 IE 7 8 9 FF 3 6 Safari 和 Chrome 今天我偶然发现它在每个浏览器中都可以工作 但在 Chrome 中却不行 我目前使用的是 C
  • 是否可以隐藏弹性图表的轴并且使其不占用任何空间?

    是否可以告诉 flex 显示没有可见轴的图表 我希望图表的内容占据所有可用空间 我可以将 AxisRenderer 上的可见性设置为 false 这将隐藏轴 但会在轴通常所在的位置留下一个空白空间 我怎样才能删除这个空白区域
  • 在 .NET Core 中的 Web 请求中使用 NTLM 身份验证

    Update事实证明 我所需要做的就是升级到 NET Core 2 1 感谢大家的解决方案 我有一个 NET Core 2 0 控制台应用程序 需要向使用 Windows 身份验证 特别是 NTLM 的 API 发出 Web 请求 这是我公
  • 如何在jpa监听器中获取实体管理器或事务

    我正在使用 Hibernate 事件侦听器 例如PostDeleteEventListener PostInsertEventListener PostUpdateEventListener在插入 删除和更新期间执行一些操作 现在我想使用
  • 变基时如何处理与给定策略的特定合并冲突?

    假设我正在执行交互式 git rebase 以整理我的存储库 例如重新排列 分离或压缩提交 git rebase i HEAD 100 还说我预计会遇到许多合并冲突 其中所需的行为是像传递一样解决 s recursive X theirs
  • 有什么方法可以显示正在运行的 JVM 中使用的标志吗?

    尽管我们已经为应用程序显式设置了许多 JVM 标志 但很难知道是否 1 布尔标志默认已打开 默认值在 JDK JRE 次要更新之间发生了变化 2 一个标志否定另一个标志 3 特定系统上给定任意标志的默认值是什么 由 Java 人体工程学设置
  • 与从 IDE 构建/运行相比,iOS 14 不允许 Flutter 应用程序(仍在开发中)从主屏幕启动

    I ve been developing a news app with Flutter and when I build and run it through Android Studio it launches fine but whe
  • Google Storage 的 CORS 策略允许来自我的来源,但不存在“Access-Control-Allow-Origin”标头

    我是 CORS 配置的新手 并试图弄清楚这一点 但根据文档 我的设置看起来是正确的 我希望你能帮我看看我错过了什么 我的代码正在尝试上传 PUT 使用签名 URL 直接将文件保存到 Google 存储 访问 XMLHttpRequest 从
  • Azure Functions:为根 URL 提供内容

    我有一个 C Azure Function 项目 具有多种功能 其中一项功能是提供一些 HTML 内容 目前可以在 api home 访问该功能 但是 我希望针对根 URL 触发它 我在我的项目中添加了一个 proxies json 文件
  • 访问 PDF.js 查看器功能/事件

    我正在考虑建立一个小网站 读取一些 PDF 文件并将它们加载到PDF js 查看器 https github com mozilla pdf js tree master web 我想专门使用查看器 我仍然希望显示所有查看器 UI 和功能
  • Excel 告诉我我的空白单元格不是空白

    我试图通过使用 F5 查找空白单元格 然后按 Ctrl 删除它们 然后将单元格向上移动 从而删除包含信息的单元格之间的空白单元格 但是当我尝试这样做时 它告诉我 没有找到细胞 I ve noticed that if I select my
  • 将文本插入另一个应用程序的文本框中

    如何使用 C 或 C 将文本插入另一个应用程序的文本框中 我很久以前就这样做过 似乎还记得一些有关使用应用程序 HWND 的事情 但由于应用程序的每个实例都发生了变化 我觉得我不记得完整的故事了 我是否可以以某种方式获取正在运行的应用程序的
  • Flexbox:将元素居中于屏幕中间

    如果我要将一个元素置于屏幕中间flexbox 以下方法是最优雅的吗 HTML div class btn div CSS body overflow hidden position absolute width 100 height 100
  • C# 创建包含数字和字符的字符串序列

    我正在尝试创建一个数字序列 in string格式 一旦我到达 99999 我想使用继续序列前导字母 Example 00000 gt 00100 gt 99999 gt A0001 gt A9999 gt B0001 gt ZZZZZ 有