简体   繁体   中英

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:

  • Which type of solution is more appropriate here, and why?; and
  • If the substring approach is more appropriate, what could I use to indicate the beginning of a number?
  • Else, if the regex is the appropriate solution, what is the regex/pattern/matcher/method I should use to extract the number?

Note: The string will always begin with the word PowerFactor followed by a non-negative integer. Thanks in advance!

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:

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM