首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从ra12ke43sh56这样的字符串中获取最后一个整数"56“?

如何从ra12ke43sh56这样的字符串中获取最后一个整数"56“?
EN

Stack Overflow用户
提问于 2010-06-21 08:45:08
回答 6查看 10.5K关注 0票数 8

如何从ra12ke43sh56这样的字符串中获取最后一个整数"56“?

我必须将下一个值修改为ra12ke43sh57,所以我希望获得最后一个整数值。

EN

回答 6

Stack Overflow用户

发布于 2010-06-21 08:50:57

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
StringBuilder sb = new StringBuilder();
for (int i = str.length() - 1; i >= 0; i --) {
    char c = str.charAt(i);
    if (Character.isDigit(c)) {
        sb.insert(0, c);
    } else {
        break;
    }
}
String result = sb.toString();

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Pattern p = Pattern.compile("[0-9]+$");
Matcher m = p.matcher(str);
if(m.find()) {
    result = m.group();
}

然后是Integer.parseInt(result)

票数 24
EN

Stack Overflow用户

发布于 2010-06-23 09:23:05

也许这就是您想要的(see also on ideone.com):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static String nextId(String id) {
    String[] parts = id.split("(?=\\d+$)", 2);
    final int L = parts[1].length();
    final int num = Integer.parseInt(parts[1]) + 1;
    return parts[0] + String.format("%0"+L+"d", num);
}
public static void main(String[] args) {
    String[] tests = {
        "jamesBond007", "ra12ke43sh57", "-42", "x888y999", "00000"
    };
    for (String test : tests) {
        System.out.println(nextId(test));
    }
    // prints "jamesBond008", "ra12ke43sh58", "-43", "x888y1000", "00001"
}

它是如何工作的

这里有几件事在起作用:

  • parts[0]是静态前缀,empty
  • parts[1]可能是string

末尾的数字序列,使用String.split(String regex, int limit)

  • 限制为2个部分

数字字符使用零宽度匹配正向匹配来拆分字符,匹配的位置可以匹配数字字符类,即

  • (?=\d+$)
    • \d
    • ...重复一次或多次+
    • ...直到字符串锚$

的末尾

使用String.format保留所有前导零的十进制整数宽度类似于宽度的格式表示:

  • 0:zeroes
  • 5:5
  • d is conversion

相关问题

在lookarounds上:

参考文献

票数 4
EN

Stack Overflow用户

发布于 2010-06-24 13:11:26

这不是一个答案,只是要提到,在最坏的情况下,“显而易见的”正则表达式(如上所述)具有令人讨厌的二次行为(我非常确定您不会处理这种退化的情况,但它本身很有趣)。

这是我准备的一个小图表:alt text http://img517.imageshack.us/img517/1158/imageerp.jpg

我使用了形式为"111..1111a2“的字符串,其中有”1“的J实例。

性能不佳的原因很明显:匹配器总是看到1,并且很高兴地认为它会成功,只有当它找到接近尾部的a时,它才发现a$不匹配,所以它一直返回,并从第二个字符开始。

最初,我认为所有格量词在这里会有所帮助,但它看起来并不直接。即使我编写了\d++,如果我调用matcher.find(),它仍然会尝试从每个索引开始匹配模式,也就是说,外部循环不会从先前的后置量词失败中得到任何提示。(注意,这个问题不会影响Matcher.matches(),因为它只尝试在单个索引,即开始处进行匹配)。

在这个特定的问题中,为了避免这种行为,我们必须反转字符串并使用简单的^\\d+模式进行搜索,或者向后迭代字符并进行手动匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3083154

复制
相关文章
vuex在页面刷新后数据被清除
用vuex来做全局的状态管理, 发现当刷新网页后,保存在vuex实例store里的数据会丢失
wust小吴
2019/12/29
3.1K0
Github清除历史记录的方法
GitHub历史提交记录累计到一定程度以后,就很麻烦,体积大下载不便,压缩也慢,这时候就想永久性地删除掉没什么卵用的历史commit记录,但还要保留stars、forks、issues、tags等重要信息,因此不能删掉仓库重建一份,而要创建一个空分支,把旧分支给嘎掉!可是GitHub网站上不提供这种功能,所以只能通过命令行的形式来搞。首先使用 git checkout --orphan new 命令。
Jean
2023/02/10
2.3K0
Github清除历史记录的方法
再谈location与history之跳转转态监控—router的两种实现模式
使用location对象可以通过很多方式来改变浏览器的位置,每次修改location的属性(hash除外),页面都会以新URL重新加载。
周陆军博客
2023/05/07
2.4K0
前端处理动态 url 和 pushStatus 的使用
起因是这样的,在尝试前后端分离的这条道路上,我自己也在不断摸索,感觉要把大部分的坑都踩踩了。目前我用的技术是:
零式的天空
2022/03/22
1.3K0
pushState、replaceState、onpopstate 实现Ajax页面的前进后退刷新
再通过 onhashchange 事件监听hash锚点的变化,手动进行前进后退操作,浏览器支持度
书童小二
2018/09/03
2.4K0
pushState、replaceState、onpopstate 实现Ajax页面的前进后退刷新
单页面应用history路由实现原理
在单页面应用中history路由是很受欢迎的,它的路由显示方式和传统的路由方式相同,在显示上很美观,比hash的方式看着舒服的多。我们经常使用的api比如push或pushState,replace或replaceState,go,forward,back等等,其实都是和html5内置的history对象息息相关的,其原理就是调用了HTML5的history内置对象,然后进行了一些封装操作。
OECOM
2020/07/01
3.3K0
ajax无刷新页面切换,历史记录后退前进解决方案
我们在工作中常常遇到需要用ajax来显示下一页和上一页,ajax可以不刷新页面进行操作!但是,假如你想通过浏览器的历史记录返回上一页和下一页。那么ajax默认是做不到的!一般需求要历史返回的时候,我们通常不使用ajax。但是呢,假如一个页面中,只有一个地方是需要动态的上一页下一页,其他地方都是固定的,那么这种情况除了使用模板之外,我们使用ajax来操作显得格外方便!那么如何解决ajax历史记录的返回和前进呢?今天我们就一起来学习一下!
用户7657330
2020/08/14
1.4K0
在vue中如何监听移动端的返回键
环境:vue.js+vant 问题:首页列表和分类页的列表用的同一个页面,页面区分用的是本地缓存,希望在分类页点击返回的时候,执行清除缓存,刷新页面 解决原理:利用history和浏览器刷新popstate状态去实现 每一次返回都会去历史记录回退 -1 所以就在进入页面之前 往历史记录里面多记录一次当前页面的链接。然后再回退的时候监听刷新,去做一些事情。 具体执行: 1、挂载完成后,判断浏览器是否支持popstate
IT工作者
2022/03/14
3.6K0
《前端实战总结》如何在不刷新页面的情况下改变URL
由于我们常用的http请求一般是基于XHR对象的实现或者fetch实现,这种请求操作并不会触发浏览器url的变化,这样虽然也能正常请求数据并渲染到页面,但是如果用户在当前页面操作了某个get请求并得到了某条数据,想通过链接将当前看到的界面分享给其他人时,那么此时浏览器url并不会变化,通过链接只能访问到初始化的数据界面,此时并不能达到理想的效果。如下图所示:
徐小夕
2021/11/16
1.9K0
《前端实战总结》如何在不刷新页面的情况下改变URL
从Vue-router到html5的pushState
首先,我们知道vue实现的单页应用中一般不会去刷新页面,因为刷新之后页面中的vuex数据就不见了。 其次,我们也知道一般情况下,url变更的时候,比如指定location.href、history.push、replace等,页面就会刷新。
木子墨
2019/02/25
3.1K0
从Vue-router到html5的pushState
PHP清除html格式
做采集的都知道,一般采集过来的内容难免会带有html标签,如果有太多的标签会影响之后的数据分析或提取,所以需要过滤掉!PHP已经为我们提供了很多清除html格式的方法了,下面就让老高介绍一下。
老高的技术博客
2022/12/24
2.3K0
HTML5 简介(三):利用 History API 无刷新更改地址栏
HTML5 新增的历史记录 API 可以实现无刷新更改地址栏链接,配合 AJAX 可以做到无刷新跳转。
山河木马
2019/03/05
2.3K0
SPA应用路由器如何工作?
SPA(single page application)-单页面应用有两个特点,一是路由控制,二是模板渲染。通过路由器,可以在不reload页面的情况下,实现页面部分刷新。那么,最关键的地方,就是如何设计路由器,如何让路由器工作?
娜姐
2022/05/13
1.6K0
SPA应用路由器如何工作?
《前端实战总结》如何在不刷新页面的情况下改变UR
由于我们常用的http请求一般是基于XHR对象的实现或者fetch实现,这种请求操作并不会触发浏览器url的变化,这样虽然也能正常请求数据并渲染到页面,但是如果用户在当前页面操作了某个get请求并得到了某条数据,想通过链接将当前看到的界面分享给其他人时,那么此时浏览器url并不会变化,通过链接只能访问到初始化的数据界面,此时并不能达到理想的效果。如下图所示:
徐小夕
2019/11/04
1.5K0
前端路由两种模式:hash与history
SPA需要在不刷新页面的情况下做页面更新,这就需要前端路由。实际上,前端路由是利用浏览器的hash和history属性
用户3258338
2020/06/19
8160
Browser 对象(一、history)
history对象是window对象的一部分,也就是说可以window.history进行访问
Rattenking
2021/01/29
9260
一文带你真正了解histroy
序言 前端路由一直都是我们单页面模式开发的重要组成部分,平时开发中会遇到路由的两种模式hash和history,只知道history模式下刷新页面会 404,显示在页面上没有hash的#那么丑陋,那
小丑同学
2020/09/18
8580
linux中清除bash命令行历史记录
bash 历史记录记录了用户在 Linux 命令行上执行的所有命令。这允许你使用键盘的上up arrow或者键盘的下down arrow键滚动查看命令历史文件。 在本文中,我们将向你展示两种在 Linux 系统上清除命令行历史记录的简单方法。 例如,如果你输入了一个包含纯文本密码的命令,并且你不希望其他系统用户或攻击者看到此密码,则需要删除或清除历史文件。 rumenz用户在命令行中输入了数据库服务器密码。 $ sudo mysql -u root -p123456 如果你在最后查看bash历史文件,你会
入门笔记
2022/06/02
3.1K0
简易路由实现——(history路由)
上篇文章讲述了 简易路由实现——(hash路由)的简单实现,本文续讲 history 路由的实现
小皮咖
2020/02/24
1.5K0
前端路由那些事
假设你浏览器访问的url地址是 http://127.0.0.1/#/test 那么通过 location.hash 获取的hash值为 #/test
树酱
2020/07/03
1K0
前端路由那些事

相似问题

openGL衰落背景

10

背景衰落效应

32

JQuery背景衰落

22

CSS背景交叉衰落问题

23

带背景的FFMPEG -衰落文本

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文