以下哪一种方式是确定子字符串封隔的有效方式?
if (str.indexOf("/") > -1)
或
if (str.contains("/"))
以下哪一种方式是确定子字符串封隔的有效方式?
if (str.indexOf("/") > -1)
或
if (str.contains("/"))
public boolean contains(CharSequence s) {
return indexOf(s.toString()) > -1;
}
您应该使用哪一种方法使代码更容易读取。 如果您正在检查字符串是否包含一个特定的子字符串, 请使用 < code> contains code>。 如果您正在寻找子字符串启动索引, 请使用 < code> indexof code> 。
几个答复提到,由于 contains
是一种额外的方法调用,因此效率较低,因此,应优先选择 indexof
而不是 contains
。
我以为我对这个问题采取了一种经验方法,而不是猜测额外方法电话的间接费用会如何影响结果。我从contains <()
(一个需要字符串常数,另一个需要变量)的基准。我用了在Windows x64上运行的刚刚释放的 1.8.0_71。
# JMH 1.11.3 (released 8 days ago)
# VM version: JDK 1.8.0_71, VM 25.71-b15
Benchmark Mode Cnt Score Error Units
IndexOfTest.containsString avgt 30 26.596 ± 0.099 ns/op
IndexOfTest.containsStringIndirect avgt 30 28.683 ± 0.088 ns/op
IndexOfTest.indexOfChar avgt 30 26.855 ± 0.171 ns/op
IndexOfTest.indexOfCharIndirect avgt 30 25.833 ± 0.116 ns/op
IndexOfTest.indexOfString avgt 30 26.192 ± 0.107 ns/op
IndexOfTest.indexOfStringIndirect avgt 30 27.547 ± 0.152 ns/op
请注意, 基准测量是每个操作的毫秒。 因此比较包含( “ z” ) 相对于 indexof ( “ z ” ), 索引( indexof () ) 的速率要小于0. 6 ns 。 有趣的是, 间接( 使用变量) 的差大于 1 ns 。
我把这一基准的代码放在GitHub上:https://github.com/tedyoung/indexof-contains-benchmark
如果目标是确定一个字符串是否包含另一个字符串, 那么 contains ()
是明显的赢家。 它将使其他开发者更高效地理解你的意图 。
两者基本上都是一样的,
public boolean contains(CharSequence s) {
return indexOf(s.toString()) > -1;
}
但如果你想通过索引做点什么,请使用 indexof
。
我相信 indexof
会更有效,但差异可以忽略。
方法有不同的用途, 如果您需要检查字符串是否包含某种内容, 请使用包含的, 但是如果您想知道字符串中最终包含它的位置, 请使用索引法 。
使用 str. contains ("/")
明显更易读, 但使用 str.indexof (/) & gt; -1
可能更有效率。 请注意, 在 indexof 调用中, 我使用字符而不是字符串 。
但是,除非你处于一个非常紧凑的循环中,否则,这不应该真正关系到表现的明智。
对于单个字符搜索,例如您的示例,如果索引参数是字符 < / 强 >, indexof 更有效率 < 强 ', 如果索引参数是字符 < / 强 > :
if (str.indexOf( / ) > -1)
最近我用 indexof ()
() < complete > < indexof > () < /code>) 来解决这个问题:当试图找出 < string > 包含空格 strong > 的字符串 < / strong > 来替换它们时,Indexof 的答案是 : < strong > the student is right one strong> 。 Go 图形,因为有人在这里说, < code> Contains () 张贴了一个呼叫 < code> Indexof 。
Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...
Check this, List<String> list = new ArrayList<String>(); for (int i = 0; i < 10000; i++) { String value = (""+UUID.randomUUID().getLeastSignificantBits()).substring(3, ...
I am in the middle of solving a problem where I think it s best suited for a decorator and a state pattern. The high level setting is something like a sandwich maker and dispenser, where I have a set ...
I have been trying to execute a MS SQL Server stored procedure via JDBC today and have been unsuccessful thus far. The stored procedure has 1 input and 1 output parameter. With every combination I ...
I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...
If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...
I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....
I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...