From f8b92c439353d29435729ace8dd17d8ab0539d5c Mon Sep 17 00:00:00 2001 From: Martin Oberhuber < martin.oberhuber@windriver.com> Date: Tue, 31 Oct 2006 14:11:25 +0000 Subject: [PATCH] Improve performance by using pre-compiled regex patterns --- .../services/clientserver/PathUtility.java | 42 +++++++++---------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/services/clientserver/PathUtility.java b/rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/services/clientserver/PathUtility.java index 0df933d5896..d3e9f017107 100644 --- a/rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/services/clientserver/PathUtility.java +++ b/rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/services/clientserver/PathUtility.java @@ -13,29 +13,28 @@ * Contributors: * Martin Oberhuber (Wind River) - Fix 161844 - regex matching backslashes * Martin Oberhuber (Wind River) - Fix 162781 - normalize without replaceAll() + * Martin Oberhuber (Wind River) - Use pre-compiled regex Pattern ********************************************************************************/ package org.eclipse.rse.services.clientserver; +import java.util.regex.Pattern; + import org.eclipse.rse.services.clientserver.archiveutils.AbsoluteVirtualPath; import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager; public class PathUtility { + //Regex pattern: / or \\ + private static Pattern badSlashPatternWin=Pattern.compile("/|\\\\\\\\"); //$NON-NLS-1$ public static String normalizeWindows(String path) { - if (path == null || path.length() < 2) return path; - boolean containsForwardSlash = false; - boolean containsDoubleSlashes = false; - boolean endsWithSlash = false; - - //TODO Improve performance by using a pre-compiled Regex Pattern - if (path.indexOf('/') != -1) containsForwardSlash = true; - if (path.indexOf("\\\\") != -1) containsDoubleSlashes = true; //$NON-NLS-1$ - if (path.endsWith("\\") || path.endsWith("/")) endsWithSlash = true; //$NON-NLS-1$ //$NON-NLS-2$ - - if (containsForwardSlash || containsDoubleSlashes) { + if (path == null || path.length() < 2) { + return path; + } + boolean endsWithSlash = (path.endsWith("\\") || path.endsWith("/")); + if (badSlashPatternWin.matcher(path).find()) { //Replace /->\, then replace \\->\ StringBuffer buf = new StringBuffer(path.length()); boolean foundBackslash=false; @@ -64,20 +63,17 @@ public class PathUtility } return path; } - + + //Regex pattern: \ or // + private static Pattern badSlashPatternUnix=Pattern.compile("\\\\|//"); //$NON-NLS-1$ + public static String normalizeUnix(String path) { - if (path == null || path.length() < 2) return path; - boolean containsBackSlash = false; - boolean containsDoubleSlashes = false; - boolean endsWithSlash = false; - - //TODO Improve performance by using a pre-compiled Regex Pattern - if (path.indexOf('\\') != -1) containsBackSlash = true; - if (path.indexOf("//") != -1) containsDoubleSlashes = true; //$NON-NLS-1$ - if (path.endsWith("\\") || path.endsWith("/")) endsWithSlash = true; //$NON-NLS-1$ //$NON-NLS-2$ - - if (containsBackSlash || containsDoubleSlashes) { + if (path == null || path.length() < 2) { + return path; + } + boolean endsWithSlash = (path.endsWith("\\") || path.endsWith("/")); + if (badSlashPatternUnix.matcher(path).find()) { //Replace \->/, then replace //->/ StringBuffer buf = new StringBuffer(path.length()); boolean foundSlash=false;