gpt4 book ai didi

Java:使用扫描仪分隔符作为标记

转载 作者:行者123 更新时间:2023-11-30 05:13:51 24 4
gpt4 key购买 nike

我正在尝试找到一种让扫描程序使用给定分隔符作为标记的好方法。例如,我想将一段文本分成数字和非数字 block ,所以理想情况下我只需将分隔符设置为 \D 并设置一些标志,例如 useDelimiterAsToken,但之后简单浏览一下 API,我什么也没想到。现在我不得不诉诸于使用组合的前瞻/后瞻作为分隔符,这有点痛苦:

scanner.useDelimiter("((?<=\\d)(?=\\D)|(?<=\\D)(?=\\d))");

这会查找从数字到非数字的任何转换,反之亦然。有更明智的方法吗?

最佳答案

编辑:编辑后的问题是如此不同,我原来的答案根本不适用。根据记录,在我看来,您正在做的解决问题的理想方法。您的分隔符是数字和非数字之间的零宽度边界,没有比您发布的内容更简洁的方式来表达这一点。

EDIT2:(回应评论中提出的问题。)您最初要求此正则表达式的替代方案:

"((?<=\\w)(?=[^\\w])|(?<=[^\\w])(?=\\w))"

这几乎就是字边界结构 \b 的工作原理:

"(?<=\\w)(?!\\w)|(?<!\\w)(?=\\w)"

也就是说,一个位置要么前面有一个单词字符,后面没有一个,要么后面有一个单词字符,前面没有一个。不同之处在于 \b 可以匹配输入的开头和结尾。您显然不希望这样,所以我添加了环视以排除这些条件:

"(?!^)\\b(?!$)"

这只是一种更简洁的方式来完成正则表达式的操作。但随后您将要求更改为匹配数字/非数字边界,并且没有像 \b 那样用于单词/非单词边界的简写。

关于Java:使用扫描仪分隔符作为标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2370817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com