Reputation: 56904
I need to extract the first integer found in a java.lang.String
and am unsure as to whether to try and use a substring
approach or a regex approach:
// Want to extract the 510 into an int.
String extract = "PowerFactor510";
// Either:
int num = Integer.valueof(extract.substring(???));
// Or a regex solution, something like:
String regex = "\\d+";
Matcher matcher = new Matcher(regex);
int num = matcher.find(extract);
So I ask:
Note: The string will always begin with the word PowerFactor
followed by a non-negative integer. Thanks in advance!
Upvotes: 8
Views: 10920
Reputation: 1661
Was a bit curious and tried the following
String extract = "PowerFactor510";
long l = System.currentTimeMillis();
System.out.println(extract.replaceAll("\\D", ""));
System.out.println(System.currentTimeMillis() - l);
System.out.println();
l = System.currentTimeMillis();
System.out.println(extract.substring("PowerFactor".length()));
System.out.println(System.currentTimeMillis() - l);
And it tuned out that the second test was much faster, so substring
wins.
Upvotes: 1
Reputation: 37566
The string will always begin with the word "PowerFactor" followed by a non-negative integer
This means you know exactly at which index you will find the number, i would say you better use the substring directly, at least considering the performance it would be much faster than searching and matching work.
extract.substring("PowerFactor".length());
I could not find any direct comparision but you can read about each one of the two options:
Upvotes: 9