|
1
12
请注意,不需要每次重新编译regex。从 Javadoc :
也就是说,如果您担心性能问题,可以预编译该模式,然后重新使用它:
而不是
我相信这个API设计的主要原因是方便。由于正则表达式也包含所有“固定”字符串/字符,因此它简化了API,使其具有一个方法而不是多个方法。如果有人担心性能问题,那么仍然可以如上面所示预编译regex。
我的感觉(我不能用任何统计证据支持)是大多数情况
将带有固定字符串/字符的regex matcher实现的性能与专门针对这些字符串/字符的matcher实现的性能进行比较是很有趣的。差异可能不够大,无法证明独立的实现是正确的。 |
|
|
2
12
我不认为大多数字符串操作是基于爪哇的正则表达式。真的,我们只是在谈论
除了低级语言特性(字符串)依赖于高级特性(regex)的丑陋之外,对于新用户来说,这也是一个令人讨厌的陷阱,他们可能会自然而然地认为具有签名的方法
有趣的是,一种对打字要求如此严格的语言犯了一个粗心的错误,即将字符串和正则表达式视为相同的东西。不那么有趣的是
仍然
没有用于执行纯字符串替换或拆分的内置方法。必须使用regex替换为
@ Tim Pietzcker:
JavaScript的字符串部分是基于Java的,而且在情况下也很混乱。
当然,Perl对Regexen做的每件事都是绝对正确的,因为它就是这样的反常行为。
(这不是一个回答,而是一个评论,但对一个来说太大了。
为什么?
Java是这样做的吗?不知道,他们在早期犯了很多错误。其中一些已经修复。我怀疑他们是否想把regex功能放在标记框中
|
|
|
3
2
我认为一个很好的理由是,它们可以简单地将责任转嫁给regex方法,它为所有的字符串方法做了所有真正的繁重工作。我猜他们认为,如果他们已经有了一个有效的解决方案,那么从开发和维护的角度来看,为每一种弦操作方法重新发明轮子的效率会降低。 |
|
|
4
2
有趣的讨论! Java最初不是作为批处理编程语言而设计的。因此,开箱即用的API更倾向于执行一个“替换”、一个“解析”等操作,除非在应用程序初始化时,应用程序可能会解析一组配置文件。 因此,这些API的优化被牺牲在了简单的圣坛上,但这个问题提出了一个重要的观点。python希望在其API中保持regex与非regex的区别,这是因为python也可以作为一种优秀的脚本语言使用。在UNIX中,fgrep的原始版本也不支持regex。 我参与了一个项目,我们必须在Java中做一些ETL工作。那时,我记得在你的问题中,我提出了一些你提到过的优化方法。 |
|
|
5
1
我怀疑这就是为什么
字符串拆分(字符串)
在HUDE下使用ReXEP是因为它在Java类库中涉及较少的无关代码。由诸如
除此之外,静态实现的解决方案将使使用JIT的运行时优化复杂化,因为它将是另一个需要热代码分析的代码块。在库中定期使用现有的模式算法意味着它们更可能是JIT编译的候选者。 |
|
|
6
1
很好的问题…… 我想,当设计师们坐下来看这个的时候(看起来不是很长时间),他们从一个角度来看,它应该被设计成尽可能多地适应不同的可能性。正则表达式提供了这种灵活性。 他们没有考虑效率。有 Java Community Process 可以提出这个。 您是否已经研究过使用java.util.regex.pattern类,在该类中编译表达式一次,然后在不同的字符串上使用。
|
|
|
7
1
在查看Java字符串类时,正则表达式的使用似乎是合理的,如果不需要正则表达式,则存在替代方案: http://java.sun.com/javase/6/docs/api/java/lang/String.html
这些是我看到的使用regex的唯一函数。 编辑:在看到StringTokenizer是遗留的之后,我会遵从P_)ter t_¶r_¶k的回答,将regex预编译为split,而不是使用tokenizer。 |
|
|
8
0
您的问题的答案是Java核心API出错了。在日常工作中,你可以考虑使用Guava图书馆的Charmatcher,它可以很好地填补空白。 |
|
|
9
0
简短的回答:不是,从来没有人 果断的 为了使regex方法比字符串API中的非regex方法更受欢迎,它就是这样解决的。 我总是理解Java的设计者故意将字符串操作方法保持在最低限度,以避免API膨胀。但是当JDK1.4中出现regex支持时,当然他们必须向字符串的API添加一些方便的方法。 因此,现在用户在强大的灵活的正则表达式方法和Java总是提供的基本的基本方法之间面临着选择。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 9 月前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 9 月前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 9 月前 |
|
|
rudraraj · java中未声明最终变量 10 月前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 10 月前 |