## org.gjt.sp.jedit
Class MiscUtilities

    java.lang.Object
      org.gjt.sp.jedit.MiscUtilities

public class MiscUtilities
extends java.lang.Object

Path name manipulation, string manipulation, and more.

The most frequently used members of this class are:

Some path name methods:

- `getFileName(String)`
- `getParentOfPath(String)`
- `constructPath(String,String)`

String comparison:

A `compareStrings(String,String,boolean)` method that unlike <function>String.compareTo()</function>, correctly recognizes and handles embedded numbers.

This class also defines several inner classes for use with the sorting features of the Java collections API:

- `MiscUtilities.StringCompare`
- `MiscUtilities.StringICaseCompare`
- `MiscUtilities.MenuItemCompare`

For example, you might call:

`Arrays.sort(myListOfStrings, new MiscUtilities.StringICaseCompare());`

Version:
  $Id: MiscUtilities.java,v 1.77 2004/08/21 01:49:05 spestov Exp $
Author:
  Slava Pestov, John Gellene (API documentation)

Nested Class Summary
`static interface` `MiscUtilities.Compare` An interface for comparing objects.
`static class` `MiscUtilities.MenuItemCompare` Compares menu item labels.
`static class` `MiscUtilities.StringCompare` Compares strings.
`static class` `MiscUtilities.StringICaseCompare` Compares strings ignoring case.

Field Summary
`static java.text.DecimalFormat` `KB_FORMAT`
`static java.text.DecimalFormat` `MB_FORMAT`
`static java.lang.String` `UTF_8_Y` This encoding is not supported by Java, yet it is useful.

Method Summary
`static java.lang.String` `buildToVersion(java.lang.String build)` Converts an internal version number (build) into a `human-readable' form.
`static java.lang.String` `canonPath(java.lang.String path)` Returns the canonical form of the specified path name.
`static java.lang.String` `charsToEntities(java.lang.String str)` Converts <, >, & in the string to their HTML entity equivalents.
`static java.lang.String` `charsToEscapes(java.lang.String str)` Escapes newlines, tabs, backslashes, and quotes in the specified string.
`static java.lang.String` `charsToEscapes(java.lang.String str, java.lang.String toEscape)` Escapes the specified characters in the specified string.
`static java.lang.String` `classToFile(java.lang.String name)` Converts a class name to a file name.
`static int` `compareStrings(java.lang.String str1, java.lang.String str2, boolean ignoreCase)` Compares two strings.
`static int` `compareVersions(java.lang.String v1, java.lang.String v2)` Deprecated. Call `compareStrings()` instead
`static java.lang.String` `concatPath(java.lang.String parent, java.lang.String path)` Like `constructPath(java.lang.String, java.lang.String)`, except `path` will be appended to `parent` even if it is absolute.
`static java.lang.String` `constructPath(java.lang.String parent, java.lang.String path)` Constructs an absolute path name from a directory and another path name.
`static java.lang.String` `constructPath(java.lang.String parent, java.lang.String path1, java.lang.String path2)` Constructs an absolute path name from three path components.
`static java.lang.String` `createWhiteSpace(int len, int tabSize)` Creates a string of white space with the specified length.
`static java.lang.String` `createWhiteSpace(int len, int tabSize, int start)` Creates a string of white space with the specified length.
`static java.lang.String` `escapesToChars(java.lang.String str)` Converts "\n" and "\t" escapes in the specified string to newlines and tabs.
`static java.lang.String` `fileToClass(java.lang.String name)` Converts a file name to a class name.
`static java.lang.String` `formatFileSize(long length)` Formats the given file size into a nice string (123 bytes, 10.6 KB, 1.2 MB).
`static java.lang.String[]` `getEncodings()` Returns a list of supported character encodings.
`static java.lang.String` `getFileExtension(java.lang.String name)` Returns the extension of the specified filename, or an empty string if there is none.
`static java.lang.String` `getFileName(java.lang.String path)` Returns the last component of the specified path.
`static java.lang.String` `getFileNameNoExtension(java.lang.String path)` Returns the last component of the specified path name without the trailing extension (if there is one).
`static java.lang.String` `getFileParent(java.lang.String path)` Deprecated. Call getParentOfPath() instead
`static java.lang.String` `getFileProtocol(java.lang.String url)` Deprecated. Call getProtocolOfURL() instead
`static int` `getLeadingWhiteSpace(java.lang.String str)` Returns the number of leading white space characters in the specified string.
`static int` `getLeadingWhiteSpaceWidth(java.lang.String str, int tabSize)` Returns the width of the leading white space in the specified string.
`static java.lang.String` `getLongestPrefix(java.util.List str, boolean ignoreCase)` Returns the longest common prefix in the given set of strings.
`static java.lang.String` `getLongestPrefix(java.lang.Object[] str, boolean ignoreCase)` Returns the longest common prefix in the given set of strings.
`static java.lang.String` `getLongestPrefix(java.lang.String[] str, boolean ignoreCase)` Returns the longest common prefix in the given set of strings.
`static int` `getOffsetOfVirtualColumn(javax.swing.text.Segment seg, int tabSize, int column, int[] totalVirtualWidth)` Returns the array offset of a virtual column number (taking tabs into account) in the segment.
`static java.lang.String` `getParentOfPath(java.lang.String path)` Returns the parent of the specified path.
`static java.lang.String` `getProtocolOfURL(java.lang.String url)` Returns the protocol specified by a URL.
`static int` `getTrailingWhiteSpace(java.lang.String str)` Returns the number of trailing whitespace characters in the specified string.
`static int` `getVirtualWidth(javax.swing.text.Segment seg, int tabSize)` Returns the virtual column number (taking tabs into account) of the specified offset in the segment.
`static java.lang.String` `globToRE(java.lang.String glob)` Converts a Unix-style glob to a regular expression.
`static boolean` `isAbsolutePath(java.lang.String path)` Returns if the specified path name is an absolute path or URL.
`static boolean` `isSupportedEncoding(java.lang.String encoding)` Returns if the given character encoding is supported.
`static boolean` `isToolsJarAvailable()` If on JDK 1.2 or higher, make sure that tools.jar is available.
`static boolean` `isURL(java.lang.String str)` Checks if the specified string is a URL.
`static boolean` `objectsEqual(java.lang.Object o1, java.lang.Object o2)` Returns if two strings are equal.
`static int` `parsePermissions(java.lang.String s)` Parse a Unix-style permission string (rwxrwxrwx).
`static void` `quicksort(java.util.List list, java.util.Comparator compare)` Sorts the specified list.
`static void` `quicksort(java.lang.Object[] obj, java.util.Comparator compare)` Sorts the specified array.
`static void` `quicksort(java.lang.Object[] obj, MiscUtilities.Compare compare)` Sorts the specified array.
`static void` `quicksort(java.util.Vector vector, java.util.Comparator compare)` Sorts the specified vector.
`static void` `quicksort(java.util.Vector vector, MiscUtilities.Compare compare)` Sorts the specified vector.
`static java.lang.String` `resolveSymlinks(java.lang.String path)` Resolves any symbolic links in the path name specified using `File.getCanonicalPath()`.
`static void` `saveBackup(java.io.File file, int backups, java.lang.String backupPrefix, java.lang.String backupSuffix, java.lang.String backupDirectory)` Saves a backup (optionally numbered) of a file.
`static void` `saveBackup(java.io.File file, int backups, java.lang.String backupPrefix, java.lang.String backupSuffix, java.lang.String backupDirectory, int backupTimeDistance)` Saves a backup (optionally numbered) of a file.
`static boolean` `stringsEqual(java.lang.String s1, java.lang.String s2)` Deprecated. Call `objectsEqual()` instead.
`static java.lang.String` `throwableToString(java.lang.Throwable t)` Returns a string containing the stack trace of the given throwable.

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### UTF_8_Y

    public static final java.lang.String UTF_8_Y

  This encoding is not supported by Java, yet it is useful. A UTF-8 file that begins with 0xEFBBBF.

  See Also:
    Constant Field Values

### KB_FORMAT

    public static final java.text.DecimalFormat KB_FORMAT

### MB_FORMAT

    public static final java.text.DecimalFormat MB_FORMAT

Method Detail

### canonPath

    public static java.lang.String canonPath(java.lang.String path)

  Returns the canonical form of the specified path name. Currently only expands a leading `~`. For local path names only.

  Parameters:
    `path` - The path name
  Since:
    jEdit 4.0pre2

### resolveSymlinks

    public static java.lang.String resolveSymlinks(java.lang.String path)

  Resolves any symbolic links in the path name specified using `File.getCanonicalPath()`. For local path names only.

  Since:
    jEdit 4.2pre1

### isAbsolutePath

    public static boolean isAbsolutePath(java.lang.String path)

  Returns if the specified path name is an absolute path or URL.

  Since:
    jEdit 4.1pre11

### constructPath

    public static java.lang.String constructPath(java.lang.String parent,
                                                 java.lang.String path)

  Constructs an absolute path name from a directory and another path name. This method is VFS-aware.

  Parameters:
    `parent` - The directory
    `path` - The path name

### constructPath

    public static java.lang.String constructPath(java.lang.String parent,
                                                 java.lang.String path1,
                                                 java.lang.String path2)

  Constructs an absolute path name from three path components. This method is VFS-aware.

  Parameters:
    `parent` - The parent directory
    `path1` - The first path
    `path2` - The second path

### concatPath

    public static java.lang.String concatPath(java.lang.String parent,
                                              java.lang.String path)

  Like `constructPath(java.lang.String, java.lang.String)`, except `path` will be appended to `parent` even if it is absolute. For local path names only..

  Parameters:
    `path` -
    `parent` -

### getFileExtension

    public static java.lang.String getFileExtension(java.lang.String name)

  Returns the extension of the specified filename, or an empty string if there is none.

  Parameters:
    `name` - The file name or path

### getFileName

    public static java.lang.String getFileName(java.lang.String path)

  Returns the last component of the specified path. This method is VFS-aware.

  Parameters:
    `path` - The path name

### getFileNameNoExtension

    public static java.lang.String getFileNameNoExtension(java.lang.String path)

  Returns the last component of the specified path name without the trailing extension (if there is one).

  Parameters:
    `path` - The path name
  Since:
    jEdit 4.0pre8

### getFileParent

    public static java.lang.String getFileParent(java.lang.String path)

  Deprecated. Call getParentOfPath() instead

### getParentOfPath

    public static java.lang.String getParentOfPath(java.lang.String path)

  Returns the parent of the specified path. This method is VFS-aware.

  Parameters:
    `path` - The path name
  Since:
    jEdit 2.6pre5

### getFileProtocol

    public static java.lang.String getFileProtocol(java.lang.String url)

  Deprecated. Call getProtocolOfURL() instead

### getProtocolOfURL

    public static java.lang.String getProtocolOfURL(java.lang.String url)

  Returns the protocol specified by a URL.

  Parameters:
    `url` - The URL
  Since:
    jEdit 2.6pre5

### isURL

    public static boolean isURL(java.lang.String str)

  Checks if the specified string is a URL.

  Parameters:
    `str` - The string to check
  Returns:
    True if the string is a URL, false otherwise

### saveBackup

    public static void saveBackup(java.io.File file,
                                  int backups,
                                  java.lang.String backupPrefix,
                                  java.lang.String backupSuffix,
                                  java.lang.String backupDirectory)

  Saves a backup (optionally numbered) of a file.

  Parameters:
    `file` - A local file
    `backups` - The number of backups. Must be >= 1. If > 1, backup files will be numbered.
    `backupPrefix` - The backup file name prefix
    `backupSuffix` - The backup file name suffix
    `backupDirectory` - The directory where to save backups; if null, they will be saved in the same directory as the file itself.
  Since:
    jEdit 4.0pre1

### saveBackup

    public static void saveBackup(java.io.File file,
                                  int backups,
                                  java.lang.String backupPrefix,
                                  java.lang.String backupSuffix,
                                  java.lang.String backupDirectory,
                                  int backupTimeDistance)

  Saves a backup (optionally numbered) of a file.

  Parameters:
    `file` - A local file
    `backups` - The number of backups. Must be >= 1. If > 1, backup files will be numbered.
    `backupPrefix` - The backup file name prefix
    `backupSuffix` - The backup file name suffix
    `backupDirectory` - The directory where to save backups; if null, they will be saved in the same directory as the file itself.
    `backupTimeDistance` - The minimum time in minutes when a backup version 1 shall be moved into version 2; if 0, backups are always moved.
  Since:
    jEdit 4.2pre5

### fileToClass

    public static java.lang.String fileToClass(java.lang.String name)

  Converts a file name to a class name. All slash characters are replaced with periods and the trailing '.class' is removed.

  Parameters:
    `name` - The file name

### classToFile

    public static java.lang.String classToFile(java.lang.String name)

  Converts a class name to a file name. All periods are replaced with slashes and the '.class' extension is added.

  Parameters:
    `name` - The class name

### getLeadingWhiteSpace

    public static int getLeadingWhiteSpace(java.lang.String str)

  Returns the number of leading white space characters in the specified string.

  Parameters:
    `str` - The string

### getTrailingWhiteSpace

    public static int getTrailingWhiteSpace(java.lang.String str)

  Returns the number of trailing whitespace characters in the specified string.

  Parameters:
    `str` - The string
  Since:
    jEdit 2.5pre5

### getLeadingWhiteSpaceWidth

    public static int getLeadingWhiteSpaceWidth(java.lang.String str,
                                                int tabSize)

  Returns the width of the leading white space in the specified string.

  Parameters:
    `str` - The string
    `tabSize` - The tab size

### getVirtualWidth

    public static int getVirtualWidth(javax.swing.text.Segment seg,
                                      int tabSize)

  Returns the virtual column number (taking tabs into account) of the specified offset in the segment.

  Parameters:
    `seg` - The segment
    `tabSize` - The tab size
  Since:
    jEdit 4.1pre1

### getOffsetOfVirtualColumn

    public static int getOffsetOfVirtualColumn(javax.swing.text.Segment seg,
                                               int tabSize,
                                               int column,
                                               int[] totalVirtualWidth)

  Returns the array offset of a virtual column number (taking tabs into account) in the segment.

  Parameters:
    `seg` - The segment
    `tabSize` - The tab size
    `column` - The virtual column number
    `totalVirtualWidth` - If this array is non-null, the total virtual width will be stored in its first location if this method returns -1.
  Returns:
    -1 if the column is out of bounds
  Since:
    jEdit 4.1pre1

### createWhiteSpace

    public static java.lang.String createWhiteSpace(int len,
                                                    int tabSize)

  Creates a string of white space with the specified length.

  To get a whitespace string tuned to the current buffer's settings, call this method as follows:

      myWhitespace = MiscUtilities.createWhiteSpace(myLength,
           (buffer.getBooleanProperty("noTabs") ? 0
           : buffer.getTabSize()));

  Parameters:
    `len` - The length
    `tabSize` - The tab size, or 0 if tabs are not to be used

### createWhiteSpace

    public static java.lang.String createWhiteSpace(int len,
                                                    int tabSize,
                                                    int start)

  Creates a string of white space with the specified length.

  To get a whitespace string tuned to the current buffer's settings, call this method as follows:

      myWhitespace = MiscUtilities.createWhiteSpace(myLength,
           (buffer.getBooleanProperty("noTabs") ? 0
           : buffer.getTabSize()));

  Parameters:
    `len` - The length
    `tabSize` - The tab size, or 0 if tabs are not to be used
    `start` - The start offset, for tab alignment
  Since:
    jEdit 4.2pre1

### globToRE

    public static java.lang.String globToRE(java.lang.String glob)

  Converts a Unix-style glob to a regular expression.

  ? becomes ., * becomes .*, {aa,bb} becomes (aa|bb).

  Parameters:
    `glob` - The glob pattern

### escapesToChars

    public static java.lang.String escapesToChars(java.lang.String str)

  Converts "\n" and "\t" escapes in the specified string to newlines and tabs.

  Parameters:
    `str` - The string
  Since:
    jEdit 2.3pre1

### charsToEscapes

    public static java.lang.String charsToEscapes(java.lang.String str)

  Escapes newlines, tabs, backslashes, and quotes in the specified string.

  Parameters:
    `str` - The string
  Since:
    jEdit 2.3pre1

### charsToEscapes

    public static java.lang.String charsToEscapes(java.lang.String str,
                                                  java.lang.String toEscape)

  Escapes the specified characters in the specified string.

  Parameters:
    `str` - The string
    `toEscape` - Any characters that require escaping
  Since:
    jEdit 4.1pre3

### compareVersions

    public static int compareVersions(java.lang.String v1,
                                      java.lang.String v2)

  Deprecated. Call `compareStrings()` instead

### compareStrings

    public static int compareStrings(java.lang.String str1,
                                     java.lang.String str2,
                                     boolean ignoreCase)

  Compares two strings.

  Unlike <function>String.compareTo()</function>, this method correctly recognizes and handles embedded numbers. For example, it places "My file 2" before "My file 10".

  Parameters:
    `str1` - The first string
    `str2` - The second string
    `ignoreCase` - If true, case will be ignored
  Returns:
    negative If str1 < str2, 0 if both are the same, positive if str1 > str2
  Since:
    jEdit 4.0pre1

### stringsEqual

    public static boolean stringsEqual(java.lang.String s1,
                                       java.lang.String s2)

  Deprecated. Call `objectsEqual()` instead.

### objectsEqual

    public static boolean objectsEqual(java.lang.Object o1,
                                       java.lang.Object o2)

  Returns if two strings are equal. This correctly handles null pointers, as opposed to calling `o1.equals(o2)`.

  Since:
    jEdit 4.2pre1

### charsToEntities

    public static java.lang.String charsToEntities(java.lang.String str)

  Converts <, >, & in the string to their HTML entity equivalents.

  Parameters:
    `str` - The string
  Since:
    jEdit 4.2pre1

### formatFileSize

    public static java.lang.String formatFileSize(long length)

  Formats the given file size into a nice string (123 bytes, 10.6 KB, 1.2 MB).

  Parameters:
    `length` - The size
  Since:
    jEdit 4.2pre1

### getLongestPrefix

    public static java.lang.String getLongestPrefix(java.util.List str,
                                                    boolean ignoreCase)

  Returns the longest common prefix in the given set of strings.

  Parameters:
    `str` - The strings
    `ignoreCase` - If true, case insensitive
  Since:
    jEdit 4.2pre2

### getLongestPrefix

    public static java.lang.String getLongestPrefix(java.lang.String[] str,
                                                    boolean ignoreCase)

  Returns the longest common prefix in the given set of strings.

  Parameters:
    `str` - The strings
    `ignoreCase` - If true, case insensitive
  Since:
    jEdit 4.2pre2

### getLongestPrefix

    public static java.lang.String getLongestPrefix(java.lang.Object[] str,
                                                    boolean ignoreCase)

  Returns the longest common prefix in the given set of strings.

  Parameters:
    `str` - The strings (calls `toString()` on each object)
    `ignoreCase` - If true, case insensitive
  Since:
    jEdit 4.2pre6

### quicksort

    public static void quicksort(java.lang.Object[] obj,
                                 java.util.Comparator compare)

  Sorts the specified array. Equivalent to calling `Arrays.sort()`.

  Parameters:
    `obj` - The array
    `compare` - Compares the objects
  Since:
    jEdit 4.0pre4

### quicksort

    public static void quicksort(java.util.Vector vector,
                                 java.util.Comparator compare)

  Sorts the specified vector.

  Parameters:
    `vector` - The vector
    `compare` - Compares the objects
  Since:
    jEdit 4.0pre4

### quicksort

    public static void quicksort(java.util.List list,
                                 java.util.Comparator compare)

  Sorts the specified list.

  Parameters:
    `list` - The list
    `compare` - Compares the objects
  Since:
    jEdit 4.0pre4

### quicksort

    public static void quicksort(java.lang.Object[] obj,
                                 MiscUtilities.Compare compare)

  Sorts the specified array. Equivalent to calling `Arrays.sort()`.

  Parameters:
    `obj` - The array
    `compare` - Compares the objects

### quicksort

    public static void quicksort(java.util.Vector vector,
                                 MiscUtilities.Compare compare)

  Sorts the specified vector.

  Parameters:
    `vector` - The vector
    `compare` - Compares the objects

### buildToVersion

    public static java.lang.String buildToVersion(java.lang.String build)

  Converts an internal version number (build) into a `human-readable' form.

  Parameters:
    `build` - The build

### isToolsJarAvailable

    public static boolean isToolsJarAvailable()

  If on JDK 1.2 or higher, make sure that tools.jar is available. This method should be called by plugins requiring the classes in this library.

  tools.jar is searched for in the following places:

  1. the classpath that was used when jEdit was started,
  2. jEdit's jars folder in the user's home,
  3. jEdit's system jars folder,
  4. java.home/lib/. In this case, tools.jar is added to jEdit's list of known jars using jEdit.addPluginJAR(), so that it gets loaded through JARClassLoader.

  On older JDK's this method does not perform any checks, and returns `true` (even though there is no tools.jar).

  Returns:
    `false` if and only if on JDK 1.2 and tools.jar could not be found. In this case it prints some warnings on Log, too, about the places where it was searched for.
  Since:
    jEdit 3.2.2

### parsePermissions

    public static int parsePermissions(java.lang.String s)

  Parse a Unix-style permission string (rwxrwxrwx).

  Parameters:
    `s` - The string (must be 9 characters long).
  Since:
    jEdit 4.1pre8

### getEncodings

    public static java.lang.String[] getEncodings()

  Returns a list of supported character encodings. On Java 1.3, returns a fixed list. On Java 1.4, uses reflection to call an NIO API.

  Since:
    jEdit 4.2pre5

### isSupportedEncoding

    public static boolean isSupportedEncoding(java.lang.String encoding)

  Returns if the given character encoding is supported. Uses reflection to call a Java 1.4 API on Java 1.4, and always returns true on Java 1.3.

  Since:
    jEdit 4.2pre7

### throwableToString

    public static java.lang.String throwableToString(java.lang.Throwable t)

  Returns a string containing the stack trace of the given throwable.

  Since:
    jEdit 4.2pre6