百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

编写程序将由数字及字符组成的字符串中的数字截取出来并按顺序

liebian365 2025-03-28 18:16 14 浏览 0 评论

public class ExtractNumbersFromString {

    public static String extractNumbers(String inputString) {
        if (inputString == null || inputString.isEmpty()) {
            return ""; // 空字符串或null输入,直接返回空字符串
        }

        StringBuilder digitString = new StringBuilder(); // 使用StringBuilder高效构建字符串

        for (int i = 0; i < inputString.length(); i++) {
            char currentChar = inputString.charAt(i); // 获取字符串中的每个字符
            if (Character.isDigit(currentChar)) { // 使用Character.isDigit()方法判断是否为数字
                digitString.append(currentChar); // 如果是数字,则添加到StringBuilder中
            }
        }

        return digitString.toString(); // 将StringBuilder转换为String并返回
    }

    public static void main(String[] args) {
        String input = "ABC137GMNQQ2049PN5FFF";
        String output = extractNumbers(input);
        System.out.println("输入字符串: " + input);
        System.out.println("输出结果: " + output); // 输出结果: 13720495  (根据题目描述,这里应该是13720495,题目示例输出可能存在笔误)

        String input2 = "NoDigitsHere";
        String output2 = extractNumbers(input2);
        System.out.println("\n输入字符串: " + input2);
        System.out.println("输出结果: " + output2); // 输出结果: (空字符串)

        String input3 = "12345";
        String output3 = extractNumbers(input3);
        System.out.println("\n输入字符串: " + input3);
        System.out.println("输出结果: " + output3); // 输出结果: 12345

        String input4 = "";
        String output4 = extractNumbers(input4);
        System.out.println("\n输入字符串: " + input4);
        System.out.println("输出结果: " + output4); // 输出结果: (空字符串)

        String input5 = null;
        String output5 = extractNumbers(input5);
        System.out.println("\n输入字符串: " + input5);
        System.out.println("输出结果: " + output5); // 输出结果: (空字符串)
    }
}

代码解释:

  1. extractNumbers(String inputString) 方法:
  2. 输入参数: inputString,类型为 String,表示包含数字和字符的输入字符串。
  3. 空值和空字符串处理:
  4. java复制代码
  5. if (inputString == null || inputString.isEmpty()) { return ""; } 首先检查输入的字符串是否为 null 或者为空字符串 ""。如果是,则直接返回空字符串,避免空指针异常,并处理了输入为空的情况。
  6. StringBuilder digitString = new StringBuilder();: 创建一个 StringBuilder 对象 digitString。StringBuilder 用于高效地构建字符串,尤其是在循环中频繁拼接字符串时,性能比直接使用 String 的 + 运算符要好得多。
  7. for (int i = 0; i < inputString.length(); i++) { ... }: 使用 for 循环遍历输入字符串 inputString 的每一个字符。
  8. char currentChar = inputString.charAt(i);: 在循环中,使用 inputString.charAt(i) 获取当前索引 i 处的字符,并将其赋值给 currentChar 变量。
  9. if (Character.isDigit(currentChar)) { ... }: 使用 Character.isDigit(currentChar) 方法来判断 currentChar 是否是一个数字字符。Character.isDigit() 是 Java 中用于判断字符是否为数字的静态方法,它能正确识别 Unicode 数字字符。
  10. digitString.append(currentChar);: 如果 currentChar 被判断为数字字符(Character.isDigit() 返回 true),则使用 digitString.append(currentChar) 将该数字字符追加到 StringBuilder 对象 digitString 的末尾。
  11. return digitString.toString();: 循环结束后,digitString 中就包含了从输入字符串中按顺序提取的所有数字字符。最后,使用 digitString.toString() 方法将 StringBuilder 对象转换为 String 对象,并将其作为方法的返回值返回。
  12. main(String[] args) 方法:
  13. main 方法用于测试 extractNumbers 方法。
  14. 创建了多个不同的输入字符串 (input, input2, input3, input4, input5),包括包含数字和字符的字符串、不包含数字的字符串、只包含数字的字符串、空字符串和 null 值。
  15. 分别调用 extractNumbers 方法处理这些输入字符串,并将输入字符串和输出结果打印到控制台,以便验证 extractNumbers 方法的正确性。

关于题目示例输出的说明:

题目描述中给出的示例输出 “01234579” 可能存在笔误。 根据题目要求 “将由数字及字符组成的字符串中的数字截取出来并按顺序输出” 以及示例输入 “ABC137GMNQQ2049PN5FFF”, 正确的输出结果应该是 “13720495”,即按照数字在原字符串中出现的顺序输出。

如果题目示例输出 “01234579” 是有意为之, 那么题目可能隐含了更复杂的要求,例如:

  • 先截取数字,然后排序并去重? 但题目描述并没有提到排序或去重。
  • 示例输出本身就是错误的? 这是最有可能的情况,因为 “01234579” 看起来像是对某些数字进行了排序或特殊处理,但与题目描述的 “按顺序输出” 相矛盾。

本代码示例是基于对题目描述 “按顺序输出” 的理解来实现的,输出结果为 “13720495”,与示例输入逻辑一致。 如果实际需求与题目示例输出 “01234579” 一致,则需要根据具体需求修改代码逻辑,例如在提取数字后进行排序等操作。

如果要实现题目示例输出 “01234579” (虽然与题目描述略有矛盾),可能需要进行如下修改 (仅为猜测,因为题目描述和示例输出不一致):

java复制代码import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

public class ExtractNumbersFromStringSorted {

    public static String extractNumbersSorted(String inputString) {
        if (inputString == null || inputString.isEmpty()) {
            return "";
        }

        Set digitSet = new TreeSet<>(); // 使用TreeSet自动排序并去重

        for (int i = 0; i < inputString.length(); i++) {
            char currentChar = inputString.charAt(i);
            if (Character.isDigit(currentChar)) {
                digitSet.add(Integer.parseInt(String.valueOf(currentChar))); // 转换为Integer并添加到Set
            }
        }

        StringBuilder sortedDigitString = new StringBuilder();
        for (Integer digit : digitSet) {
            sortedDigitString.append(digit); // 按排序后的顺序添加到StringBuilder
        }

        return sortedDigitString.toString();
    }

    public static void main(String[] args) {
        String input = "ABC137GMNQQ2049PN5FFF";
        String output = extractNumbersSorted(input);
        System.out.println("输入字符串: " + input);
        System.out.println("输出结果: " + output); // 输出结果: 01234579 (与题目示例输出一致,但与题目描述略有矛盾)
    }
}

修改后的代码解释 (针对示例输出 “01234579”):

  1. Set digitSet = new TreeSet<>();: 使用 TreeSet 来存储提取的数字。TreeSet 会自动对元素进行排序,并且不允许重复元素 (去重)。
  2. digitSet.add(Integer.parseInt(String.valueOf(currentChar)));: 将提取的数字字符转换为 Integer 对象,并添加到 digitSet 中。
  3. 遍历 digitSet: 由于 TreeSet 已经排序,遍历 digitSet 时,数字会按照升序排列。
  4. 构建排序后的字符串: 将排序后的数字字符添加到 StringBuilder 中。

请根据实际题目要求和期望的输出结果选择合适的代码版本。 如果题目确实要求输出 “01234579”,则后一个排序去重的版本更符合示例输出,但与 “按顺序输出” 的描述略有偏差。 如果更倾向于 “按顺序输出” 的描述,则第一个代码版本 (输出 “13720495”) 更符合逻辑。

相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符&quot;

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: