如何将字母数字电话号码转换为数字

2023-11-26

UPDATE:

我的实用程序的最终版本如下所示:

StringBuilder b = new StringBuilder();

for(char c : inLetters.toLowerCase().toCharArray())
{
    switch(c)
    {
    case '0':                                          b.append("0"); break;
    case '1':                                          b.append("1"); break;
    case '2': case 'a': case 'b': case 'c':            b.append("2"); break;
    case '3': case 'd': case 'e': case 'f':            b.append("3"); break;
    case '4': case 'g': case 'h': case 'i':            b.append("4"); break;
    case '5': case 'j': case 'k': case 'l':            b.append("5"); break;
    case '6': case 'm': case 'n': case 'o':            b.append("6"); break;
    case '7': case 'p': case 'q': case 'r': case 's':  b.append("7"); break;
    case '8': case 't': case 'u': case 'v':            b.append("8"); break;
    case '9': case 'w': case 'x': case 'y': case 'z':  b.append("9"); break;
    }
}

return builder.toString();

原问题:

我正在承担将字母数字电话号码转换为数字字符串的简单任务。例如,1-800-HI-HAXOR 将变为 1-800-44-42967。我最初的尝试是创建一个令人讨厌的 switch 语句,但我希望有一个更优雅、更高效的解决方案。这是我所得到的:

for(char c : inLetters.toLowerCase().toCharArray())
{
    switch(c)
    {
    case '0':                                         result+="0"; break;
    case '1':                                         result+="1"; break;
    case '2': case 'a': case 'b': case 'c':           result+="2"; break;
    case '3': case 'd': case 'e': case 'f':           result+="3"; break;
    case '4': case 'g': case 'h': case 'i':           result+="4"; break;
    case '5': case 'j': case 'k': case 'l':           result+="5"; break;
    case '6': case 'm': case 'n': case 'o':           result+="6"; break;
    case '7': case 'p': case 'q': case 'r': case 's': result+="7"; break;
    case '8': case 't': case 'u': case 'v':           result+="8"; break;
    case '9': case 'w': case 'x': case 'y': case 'z': result+="9"; break;
    }
}

Thanks!


switch 语句其实并没有那么糟糕。您的算法与电话号码的长度呈线性关系。该代码是可读的,并且很容易通过检查进行验证。我不会搞乱它,除了添加一个default处理错误的情况。 (我不是 Java 程序员,所以如果它被称为其他名称,请原谅我。)

If you have为了使其更快,按字符索引的预初始化表将避免除基本错误检查之外的任何比较。您甚至可以通过复制表中的值来避免大小写转换(digit['A'] = digit['a'] = "2";)。初始化表的成本将根据转换总数进行摊销。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将字母数字电话号码转换为数字 的相关文章

随机推荐

  • 不明确的列名错误,如何修复?

    1 Users 4 Cols UserID UserName RealName Flags 2 UsersGroups 2 Cols UserID GroupID 3 Groups 3 Cols GroupID GroupName Flag
  • bash 使用陷阱 SIGCHLD 重新启动子进程?

    我见过监控程序要么在脚本中定期使用 ps 或 服务状态 在 Linux 上 检查进程状态 要么在 C C 中分叉并等待进程 我想知道是否可以将 bash 与 trap 一起使用 并在收到 SIGCHLD 时重新启动子进程 我已经在 RedH
  • 身份验证失败 [SMTP:STARTTLS 失败(代码:220,响应:2.0.0 准备启动 TLS)]

    我尝试使用 SMTP 和 PEAR 在 PHP 中发送带有附件的电子邮件 但收到错误 身份验证失败 SMTP STARTTLS 失败 代码 220 响应 2 0 0 准备启动 TLS
  • Windows CE 在重置时删除 .NET CF

    我正在为专有的 Windows CE 4 2 设备编写一个 C 应用程序 我没有该设备的规格或几乎任何其他信息 我可以访问文件系统 基本上就是这样 我也无法获得原始制造商的支持 现在 我可以很好地安装 NET Compact 框架 并且一切
  • 将 cv::Mat 转换为 const CvMat* 或 CvMat*

    我只知道C语言 所以我感到困惑 不理解的语法openCV数据类型 特别是cv Mat CvMat Mat 我的问题是如何转换cv Mat to const CvMat or CvMat 并且任何人都可以提供文档链接来了解两者之间的差异CvM
  • Windows 7 - 任务栏 - 固定或取消固定程序链接

    如标题所示 有 Win32 API 可以做到这一点吗 不要这样做 我 99 确信没有官方 API 这与没有官方 API 的原因完全相同以编程方式访问旧的 开始 菜单的引脚列表 简而言之 大多数用户不希望程序放入垃圾their收藏夹 快速启动
  • 错误:资源 android:attr/fontVariationSettings 未找到

    警告 android dexOptions incremental属性已弃用 并且它对构建过程没有影响 home midhilaj gradle caches transforms 1 files 1 1 appcompat v7 26 1
  • NiFi - 如何在 ExecuteStreamCommand 中引用 flowFile?

    我需要执行类似的操作 sed 1d simple tsv gt noHeader tsv 这将从我的大流文件 gt 1 GB 中删除第一行 问题是 我需要在我的流程文件上执行它 所以它是 sed 1d myFlowFile gt myFlo
  • 当计划的 WebJob 长时间运行时会发生什么

    如果计划运行 Azure WebJob 但之前运行的实例尚未完成 会发生什么情况 它会再次运行 WebJob 以便同时运行两个 WebJob 吗 它不会运行 WebJob 并重新开始计时吗 我无法在任何地方找到这种行为的记录 我有一项工作想
  • numpy 数组上的条件运算

    我是 NumPy 新手 在 numpy 数组上运行一些条件语句时遇到了问题 假设我有 3 个 numpy 数组 如下所示 a 0 4 4 2 1 3 0 2 3 2 4 4 b 6 9 8 6 7 7 9 6 8 6 5 7 and c 0
  • 将 Python Poetry 与 Docker 集成

    你能给我举个例子吗Dockerfile我可以在其中安装我需要的所有软件包poetry lock and pyproject toml从 Docker 进入我的镜像 容器 使用时有几点需要注意poetry和 一起docker 安装 官方安装方
  • AWS Glue 谓词下推条件无效

    我有一个 MySQL 源 我从中创建一个具有谓词下推条件的 Glue 动态框架 如下所示 datasource glueContext create dynamic frame from catalog database source ca
  • Ionic - 查看从未调用的休假事件

    将现有 Ionic 项目从 1 13 beta 更新到 1 14 beta 后 我遇到了一些无法解释的行为 从一种视图状态更改为另一种视图状态时 旧视图不会离开页面 在记录 Angular ui 路由器事件和 Ionic 导航事件后 我注意
  • Django-Haystack 与 Solr 包含搜索

    我在用haystack在项目中使用solr作为后端 我希望能够执行包含搜索 类似于 Django filter something contains The startswith选项不适合我们的需求 因为顾名思义 它查找以字符串开头的单词
  • 需要一个包含至少一个数字、零个或多个字母、无空格、最小/最大的正则表达式

    我需要一个正则表达式来匹配包含以下内容的字符串 至少一个数字 零个或多个字母 没有其他字符 例如空格 该字符串还必须至少包含 8 个字符 最多包含 13 个字符 8 13 个字符串中数字和 或字母的位置并不重要 我还没有弄清楚如何确保字符串
  • 不要使用数组列表!

    人们经常告诉我不要使用 ArrayList 在 VB NET 中创建数组 我想听听对此的意见 为什么不呢 创建和操作数组内容 维度等的最佳方法是什么 Thanks 请改用通用列表 ArrayList 不是类型化的 这意味着您可以拥有一个包含
  • 在 Oracle 中插入一百万行的最快方法

    如何以最佳方式在 Oracle 中插入超过一百万行以执行以下过程 如果我将 FOR 循环增加到一百万行 它就会挂起 create or replace procedure inst prc1 as xssn number xcount nu
  • 在调试会话之间保留 app.config 中的数据

    因此 长话短说 我正在开发一个应用程序 它将利用一些可能在运行时通过应用程序本身更改的配置信息 为此 我想使用Settings class 问题在于 信息在应用程序的不同运行之间没有保留 Run 1 Console WriteLine Se
  • pod install -bash:pod:找不到命令

    我安装了pod前一段时间 但是 它已经停止工作 所以我正在努力解决this again 然而 我几乎立即遇到了一个问题 pod install bash pod command not found 有什么建议为什么会发生这种情况吗 好的 找
  • 如何将字母数字电话号码转换为数字

    UPDATE 我的实用程序的最终版本如下所示 StringBuilder b new StringBuilder for char c inLetters toLowerCase toCharArray switch c case 0 b