IAmYourFaja
IAmYourFaja

Reputation: 56904

Performance comparision between Substring vs RegEx when start index is known

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

Answers (2)

tmwanik
tmwanik

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

CloudyMarble
CloudyMarble

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

Related Questions