TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

<< Back to JAVA

Java regionMatches Example and Performance

Use the regionMatches string method to test parts of strings. Avoid creating substrings.
RegionMatches. This method tests a region of one string against another. We provide a start index for both strings. We also provide a length argument (the number of chars to test on both).
With regionMatches, we can see if a substring patches another substring. We can avoid creating substrings. This saves allocations and improves performance.
An example. Let us begin with this example. We have a string literal with four concatenated words in it. We match each part of this literal.

Case: We can have regionMatches ignore the case of characters by passing a value of "true" as the first argument.

Java program that uses regionMatches public class Program { public static void main(String[] args) { String codes = "onetwothreeFour"; // Check for "two" at index 3. // ... Length is 3 chars. if (codes.regionMatches(3, "two", 0, 3)) { System.out.println(true); } // Check for "three" at index 6. // ... Length is 5 chars. if (codes.regionMatches(6, "three", 0, 5)) { System.out.println(true); } // Check for "FOUR" from "IS_FOUR" at index 11. // ... Length is 4 chars. if (codes.regionMatches(true, 11, "IS_FOUR", 3, 4)) { System.out.println(true); } } } Output true true true
Benchmark. Here is a benchmark of regionMatches. We can use regionMatches for some significant performance wins in real-world Java programs.

Version 1: In this version of the code, we use the regionMatches method to compare 2 substring parts.

Version 2: In this code we make two substring calls. Those substrings are compared with equals().

Equals

Result: RegionMatches is faster. In this benchmark regionMatches is over 10 times faster than the version that uses substring and equals.

Java program that benchmarks regionMatches public class Program { public static void main(String[] args) { String part1 = "catdogbird"; String part2 = "dogbirdcat"; // Test two versions. if (part1.regionMatches(3, part2, 0, 3)) { System.out.println("True 1"); } if (part1.substring(3, 6).equals(part2.substring(0, 3))) { System.out.println("True 2"); } int count = 0; long t1 = System.currentTimeMillis(); // Version 1: use regionMatches to compare two substrings. for (int i = 0; i < 10000000; i++) { if (part1.regionMatches(3, part2, 0, 3)) { count++; } } long t2 = System.currentTimeMillis(); // Version 2: use substring to compare two substrings. for (int i = 0; i < 10000000; i++) { if (part1.substring(3, 6).equals(part2.substring(0, 3))) { count++; } } long t3 = System.currentTimeMillis(); // ... Times. System.out.println(count); System.out.println(t2 - t1); System.out.println(t3 - t2); } } Output True 1 True 2 20000000 15 ms: regionMatches 172 ms: substring, equals
Notes, indexes. When using methods like regionMatches and substring(), using correct indexes and lengths is important. The final argument on regionMatches is a length.Substringlength
Performance. Avoiding allocations is one of the best performance optimizations. With regionMatches, we can achieve a big performance win if we can reduce substring allocations.
A summary. The arguments to regionMatches can be hard to get right at first. But the performance and code size improvements with regionMatches makes it worth the effort.
© TheDeveloperBlog.com
The Dev Codes

Related Links:


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf