华为OD机试之在字符串中找出连续最长的数字串(含“+-”号)(Java源码)

news2024/11/25 0:50:29

在字符串中找出连续最长的数字串(含“±”号)

输入描述

请在一个字符串中找出连续最长的数字串,并返回这个数字串。

如果存在长度相同的连续数字串,返回最后一个。

如果没有符合条件的字符串,返回空字符串””。

注意:
  • 数字串可以由数字”0-9″、小数点”.”、正负号”±”组成,长度包括组成数字串的所有符号。
  • “.”、“±”仅能出现一次,”.”的两边必须是数字,”±”仅能出现在开头且其后必须要有数字。
  • 长度不定,可能含有空格。

输入描述

一串字符

输出描述

连续最长的数字串(合法)
否则 输出 “”

用例

输入1234567890abcd9.+12345.678.9ed
输出+12345.678
说明

解析

  1. 使用正则表达式匹配出数字即可, 这种方式比直接拆分数组简单很多
    这里面有个非常重要的点
    1.1 匹配模式 可以写为 ([±]{0,1}\d+\.{0,1}\d+)
    1.2 当输入的内容为 1234567890abcd9.+12345.678.999999ed-205 时 匹配结果为+12345.678 长度是10位 但是经过核对发现 678.999999 也是10位 且为合法数字。如果只是简单的使用正则去找的话,估计像上述这个字符串匹配不出来。
    1.3 类似于1.2中的这种字符 我逆向进行了匹配来提高匹配情况。我也相信,即使这样做也可能并不能完全找到所有的正确答案。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test2 {
	public static void main(String[] args) {
		String input = "1234567890abcd9.+12345.678.999999ed-205";
		String regex = "([+-]{0,1}\\d+\\.{0,1}\\d+)";// ()括号是匹配表达式 []匹配之内的一个即可
		String res = calcResult(regex, input, true);
		String reverseRes = calcResult(regex, new StringBuilder(input).reverse().toString(), false);
		reverseRes = new StringBuilder(reverseRes).reverse().toString();
//		System.out.println(res);
//		System.out.println(reverseRes);
		if (input.indexOf(res) > input.indexOf(reverseRes)) {
			System.out.println(res);
		} else {
			System.out.println(reverseRes);
		}
	}

	/**
	 * 
	 * @param regex 匹配模式
	 * @param input 匹配字符
	 * @param flag  true 正向 false 反向
	 * @return
	 */
	public static String calcResult(String regex, String input, boolean flag) {
		Pattern p = Pattern.compile(regex);
		Matcher matcher = p.matcher(input);
		String res = "";
		while (matcher.find()) {
			if (flag && matcher.group().length() >= res.length()) {
				res = matcher.group(); // 正向取后
			} else if ((!flag) && matcher.group().length() > res.length()) {
				res = matcher.group(); // 反向取前
			}
		}
		return res;
	}
}

代码运行示意图
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/616691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ansible进阶2——角色管理

文章目录 一、角色1.1 获取角色方式1.2 角色结构1.3 定义变量和默认变量1.4 使用方法1.5 控制playbook中的任务执行流程 二、红帽企业Linux系统角色2.1 常见系统角色2.2 使用系统时间同步角色 三、自定义角色3.1 创建角色目录结构3.2 编写角色内容3.3 编写总结 四、ansible gal…

【C++】内存管理的基本操作,new与delete的实现原理以及operator new与operator delete函数

文章目录 前言一、new,delete操作内置类型二、new/delete操纵自定义类型3. operator new与operator delete函数4. new/delete实现原理4.malloc/free和new/delete的区别 前言 程序中内存的划分: 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向…

高考必胜,归来仍是少年!

高考必胜,归来仍是少年! 这是小索奇专门为高考生写的文章高考生 我以前给大家弄过一些免费的付费资料,现在看到后台很多伙伴们都在寻找资料,一些没有充分准备的小伙伴此刻一定很匆忙吧! 我想对大家说: 高…

基于 FFMPEG 的跨平台视频播放器简明教程(二):基础知识和解封装(demux)

系列文章目录 基于 FFMPEG 的跨平台视频播放器简明教程(一):FFMPEG Conan 环境集成 文章目录 系列文章目录前言基础知识视频,你所看到的!音频 - 你所听到的声音编解码器 - 压缩数据容器 - 存放音频和视频的地方 解封…

vue3.0与vue2.0的区别简记(基于官方文档)

vue3.0与vue2.0的区别简记(基于官方文档) 基于vue3.0和vue2.0官方文档简单记录vue3.0版本和2.0版本的区别。 一直没有看文档的习惯(就是不爱学习,现在吃了没文化的亏),遇到问题才去补充点食粮&#xff0c…

祝2023高考考生高考顺利!金榜题名

前言:光阴似箭,岁月如梭。明天就是全国每年一次的高考了,我也即将结束我的大一生活成为一名大二的小学长啦嘿嘿。而我今天呢主要是想祝马上要高考的学弟学妹们高考顺利,金榜题名,并且借此机会顺便讲讲我的高考前后的故…

解决python通过pip离线安装flask,numpy报错解决(centos)

1. 离线安装Python https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz 解压,编译,安装 tar xzvf Python-3.7.1.tgz ./configuremakemake install 离线环境下如果系统不是完整版安装编译会报错,需要解决依赖问题,如下&am…

5 种常见的 Linux 打包类型:tar、gzip、bzip2、zip 、 7z

在 Linux 系统中,打包和压缩文件是常见的操作。不同的打包类型适用于不同的用途和需求。本文将详细介绍 5 种常见的 Linux 打包类型,包括tar、gzip、bzip2、zip 和 7z,以及它们的特点、使用方法和适用场景。 1. tar tar(tape arc…

音悦台项目测试报告

文章目录 项目背景项目功能测试计划与设计功能测试自动化测试 测试结果功能测试结果UI自动化测试结果 项目背景 现如今人们的生活压力大,容易使人疲惫,为了使得人们在闲暇之余可以听音乐放松,为此设计出一款轻量的听音乐网站,快速…

centos安装部署Kubernetes(k8s)步骤使用kubeadm方式

文章目录 1、修改系统配置2、安装docker应用3. 拉取docker镜像4、cri-dockerd安装5、安装kubeadm和kubelet6、配置flannel网络插件7、Node节点加入集群操作 机器地址: 192.168.0.35 k8s-master 192.168.0.39 k8s-node1 192.168.0.116 k8s-node2 1、修改系统配置 修…

Web应用技术(第十六周/持续更新)

本次联系基于how2j的教程完成对SpringBoot的初步学习。 初识Springboot 学习导入:1.第一个基于SpringBoot的项目:(1)application.java:该文件中的核心代码: (2)HelloController.jav…

一. ATR技术指标的定义与运用

一. ATR的定义 1. 什么是ATR ATR英文全名是Average true range,翻译过来就是平均真实波幅,这个指标主要用来衡量最近N天TR(真实波幅)的平均值。 2. ATR相关计算公式 T R [ ( 最高价 − 最低价 ) , ( 前一次收盘价 − 最高价 ) &#xff0…

macOS Sonoma 14.0 Beta 1 (23A5257q) Boot ISO 原版可引导镜像

macOS Sonoma 14.0 Beta 1 (23A5257q) Boot ISO 原版可引导镜像 本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和…

OAuth2.0 授权 OpenID Connect 身份认证

文章目录 OAuth2.0历史由来名词解释授权码模式(authorization code 最常用)先换取code,再根据 code 换取 access_token原因 简化模式(implicit)密码模式(resource owner password credentials)客…

【P49】JMeter 查看结果树(View Results Tree)

文章目录 一、查看结果树(View Results Tree)参数说明二、准备工作三、测试计划设计 一、查看结果树(View Results Tree)参数说明 可以查看取样器的请求参数、返回结果 使用场景:一般在调试测试计划期间用来查看取样…

Bigdata1234.cn课堂测试

Java源文件中有一个公共类名称为Test,则该源文件名必须是:Test.java . Java中的基本数据类型共有8个:byte、short、int、long、float、double、char、boolean。 . Eclipse中内容补全的快捷键是alt/ Eclipse 中自动导包的快捷键是 Ctrl Sh…

MySQL数据库从入门到精通学习第8天(表数据的查询)

表数据的查询 基本查询语句单表查询聚合函数查询多表连接查询子查询合并查询结果定义表和字段的别名使用正则表达式查询 基本查询语句 SELECT 语句非常的强大,是最常用的查询语句。他具有一个固定的格式,如下: SELECT 查询的内容 FROM 数据…

【Mysql数据库从0到1】-入门基础篇--mysql 多表查询

【Mysql数据库从0到1】-入门基础篇--mysql 多表查询 🔻一、mysql 多表查询1.1 🍃 7种sql joins 的实现1.2 🍃 错误写法---笛卡尔积错误1.3 🍃 正确的多表select写法 🔻二、内连接( inner) join🔻三、 外连接…

100天精通Golang(基础入门篇)——第2天:学习Go语言的前世今生:一门强大的编程语言的崛起

🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《I…

如何构建一个可实盘的跨期套利策略?

一、策略摘要 跨期套利,在同一个品种但不同月份的期货合约上建立仓位相同、方向相反的交易头寸,最后以对冲或交割方式结束交易、获得收益。因其合约价差具有较好的稳定性,被众多交易者所青睐。本篇内容我们将通过掘金量化平台构建一个可交易…