⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 miscutilities.java

📁 用java 编写的源码开放的文本编辑器。有很多有用的特性
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		boolean backslash = false;		boolean insideGroup = false;		boolean insideNegativeLookahead = false;		for(int i = 0; i < glob.length(); i++)		{			char c = glob.charAt(i);			if(backslash)			{				buf.append('\\');				buf.append(c);				backslash = false;				continue;			}			switch(c)			{			case '\\':				backslash = true;				break;			case '?':				buf.append('.');				break;			case '.':				buf.append("\\.");				break;			case '*':				buf.append(".*");				break;			case '{':				buf.append('(');				if(i + 1 != glob.length() && glob.charAt(i + 1) == '!')				{					buf.append('?');					insideNegativeLookahead = true;				}				else					insideGroup = true;				break;			case ',':				if(insideGroup)				{					if(insideNegativeLookahead)					{						buf.append(").*");						insideNegativeLookahead = false;					}					buf.append('|');				}				else					buf.append(',');				break;			case '}':				if(insideNegativeLookahead)				{					buf.append(").*");					insideNegativeLookahead = false;				}				else if(insideGroup)				{					buf.append(')');					insideGroup = false;				}				else					buf.append('}');				break;			default:				buf.append(c);			}		}		return buf.toString();	} //}}}	//{{{ escapesToChars() method	/**	 * Converts "\n" and "\t" escapes in the specified string to	 * newlines and tabs.	 * @param str The string	 * @since jEdit 2.3pre1	 */	public static String escapesToChars(String str)	{		StringBuffer buf = new StringBuffer();		for(int i = 0; i < str.length(); i++)		{			char c = str.charAt(i);			switch(c)			{			case '\\':				if(i == str.length() - 1)				{					buf.append('\\');					break;				}				c = str.charAt(++i);				switch(c)				{				case 'n':					buf.append('\n');					break;				case 't':					buf.append('\t');					break;				default:					buf.append(c);					break;				}				break;			default:				buf.append(c);			}		}		return buf.toString();	} //}}}	//{{{ charsToEscapes() method	/**	 * Escapes newlines, tabs, backslashes, and quotes in the specified	 * string.	 * @param str The string	 * @since jEdit 2.3pre1	 */	public static String charsToEscapes(String str)	{		return charsToEscapes(str,"\n\t\\\"'");	} //}}}	//{{{ charsToEscapes() method	/**	 * Escapes the specified characters in the specified string.	 * @param str The string	 * @param extra Any characters that require escaping	 * @since jEdit 4.1pre3	 */	public static String charsToEscapes(String str, String toEscape)	{		StringBuffer buf = new StringBuffer();		for(int i = 0; i < str.length(); i++)		{			char c = str.charAt(i);			if(toEscape.indexOf(c) != -1)			{				if(c == '\n')					buf.append("\\n");				else if(c == '\t')					buf.append("\\t");				else				{					buf.append('\\');					buf.append(c);				}			}			else				buf.append(c);		}		return buf.toString();	} //}}}	//{{{ compareVersions() method	/**	 * @deprecated Call <code>compareStrings()</code> instead	 */	public static int compareVersions(String v1, String v2)	{		return compareStrings(v1,v2,false);	} //}}}	//{{{ compareStrings() method	/**	 * Compares two strings.<p>	 *	 * Unlike <function>String.compareTo()</function>,	 * this method correctly recognizes and handles embedded numbers.	 * For example, it places "My file 2" before "My file 10".<p>	 *	 * @param str1 The first string	 * @param str2 The second string	 * @param ignoreCase If true, case will be ignored	 * @return negative If str1 &lt; str2, 0 if both are the same,	 * positive if str1 &gt; str2	 * @since jEdit 4.0pre1	 */	public static int compareStrings(String str1, String str2, boolean ignoreCase)	{		char[] char1 = str1.toCharArray();		char[] char2 = str2.toCharArray();		int len = Math.min(char1.length,char2.length);		for(int i = 0, j = 0; i < len && j < len; i++, j++)		{			char ch1 = char1[i];			char ch2 = char2[j];			if(Character.isDigit(ch1) && Character.isDigit(ch2)				&& ch1 != '0' && ch2 != '0')			{				int _i = i + 1;				int _j = j + 1;				for(; _i < char1.length; _i++)				{					if(!Character.isDigit(char1[_i]))					{						//_i--;						break;					}				}				for(; _j < char2.length; _j++)				{					if(!Character.isDigit(char2[_j]))					{						//_j--;						break;					}				}				int len1 = _i - i;				int len2 = _j - j;				if(len1 > len2)					return 1;				else if(len1 < len2)					return -1;				else				{					for(int k = 0; k < len1; k++)					{						ch1 = char1[i + k];						ch2 = char2[j + k];						if(ch1 != ch2)							return ch1 - ch2;					}				}				i = _i - 1;				j = _j - 1;			}			else			{				if(ignoreCase)				{					ch1 = Character.toLowerCase(ch1);					ch2 = Character.toLowerCase(ch2);				}				if(ch1 != ch2)					return ch1 - ch2;			}		}		return char1.length - char2.length;	} //}}}	//{{{ stringsEqual() method	/**	 * Returns if two strings are equal. This correctly handles null pointers,	 * as opposed to calling <code>s1.equals(s2)</code>.	 * @since jEdit 4.1pre5	 */	public static boolean stringsEqual(String s1, String s2)	{		if(s1 == null)		{			if(s2 == null)				return true;			else				return false;		}		else if(s2 == null)			return false;		else			return s1.equals(s2);	} //}}}	//}}}	//{{{ Sorting methods	//{{{ quicksort() method	/**	 * Sorts the specified array. Equivalent to calling	 * <code>Arrays.sort()</code>.	 * @param obj The array	 * @param compare Compares the objects	 * @since jEdit 4.0pre4	 */	public static void quicksort(Object[] obj, Comparator compare)	{		Arrays.sort(obj,compare);	} //}}}	//{{{ quicksort() method	/**	 * Sorts the specified vector.	 * @param vector The vector	 * @param compare Compares the objects	 * @since jEdit 4.0pre4	 */	public static void quicksort(Vector vector, Comparator compare)	{		Collections.sort(vector,compare);	} //}}}	//{{{ quicksort() method	/**	 * Sorts the specified list.	 * @param list The list	 * @param compare Compares the objects	 * @since jEdit 4.0pre4	 */	public static void quicksort(List list, Comparator compare)	{		Collections.sort(list,compare);	} //}}}	//{{{ quicksort() method	/**	 * Sorts the specified array. Equivalent to calling	 * <code>Arrays.sort()</code>.	 * @param obj The array	 * @param compare Compares the objects	 */	public static void quicksort(Object[] obj, Compare compare)	{		Arrays.sort(obj,compare);	} //}}}	//{{{ quicksort() method	/**	 * Sorts the specified vector.	 * @param vector The vector	 * @param compare Compares the objects	 */	public static void quicksort(Vector vector, Compare compare)	{		Collections.sort(vector,compare);	} //}}}	//{{{ Compare interface	/**	 * An interface for comparing objects. This is a hold-over from	 * they days when jEdit had its own sorting API due to JDK 1.1	 * compatibility requirements. Use <code>java.util.Comparable</code>	 * instead.	 */	public interface Compare extends Comparator	{		int compare(Object obj1, Object obj2);	} //}}}	//{{{ StringCompare class	/**	 * Compares strings.	 */	public static class StringCompare implements Compare	{		public int compare(Object obj1, Object obj2)		{			return compareStrings(obj1.toString(),				obj2.toString(),false);		}	} //}}}	//{{{ StringICaseCompare class	/**	 * Compares strings ignoring case.	 */	public static class StringICaseCompare implements Compare	{		public int compare(Object obj1, Object obj2)		{			return compareStrings(obj1.toString(),				obj2.toString(),true);		}	} //}}}	//{{{ MenuItemCompare class	/**	 * Compares menu item labels.	 */	public static class MenuItemCompare implements Compare	{		public int compare(Object obj1, Object obj2)		{			return compareStrings(((JMenuItem)obj1).getText(),				((JMenuItem)obj2).getText(),true);		}	} //}}}	//}}}	//{{{ buildToVersion() method	/**	 * Converts an internal version number (build) into a	 * `human-readable' form.	 * @param build The build	 */	public static String buildToVersion(String build)	{		if(build.length() != 11)			return "<unknown version: " + build + ">";		// First 2 chars are the major version number		int major = Integer.parseInt(build.substring(0,2));		// Second 2 are the minor number		int minor = Integer.parseInt(build.substring(3,5));		// Then the pre-release status		int beta = Integer.parseInt(build.substring(6,8));		// Finally the bug fix release		int bugfix = Integer.parseInt(build.substring(9,11));		return "" + major + "." + minor			+ (beta != 99 ? "pre" + beta :			(bugfix != 0 ? "." + bugfix : "final"));	} //}}}	//{{{ isToolsJarAvailable() method	/**	 * 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.	 * <p>	 * tools.jar is searched for in the following places:	 * <ol>	 *   <li>the classpath that was used when jEdit was started,	 *   <li>jEdit's jars folder in the user's home,	 *   <li>jEdit's system jars folder,	 *   <li><i>java.home</i>/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.	 * </ol><p>	 *	 * On older JDK's this method does not perform any checks, and returns	 * <code>true</code> (even though there is no tools.jar).	 *	 * @return <code>false</code> 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	 */	public static boolean isToolsJarAvailable()	{		Log.log(Log.DEBUG, MiscUtilities.class,"Searching for tools.jar...");		Vector paths = new Vector();		//{{{ 1. Check whether tools.jar is in the system classpath:		paths.addElement("System classpath: "			+ System.getProperty("java.class.path"));		try		{			// Either class sun.tools.javac.Main or			// com.sun.tools.javac.Main must be there:			try			{				Class.forName("sun.tools.javac.Main");			}			catch(ClassNotFoundException e1)			{				Class.forName("com.sun.tools.javac.Main");			}			Log.log(Log.DEBUG, MiscUtilities.class,				"- is in classpath. Fine.");			return true;		}		catch(ClassNotFoundException e)		{			//Log.log(Log.DEBUG, MiscUtilities.class,			//	"- is not in system classpath.");		} //}}}		//{{{ 2. Check whether it is in the jEdit user settings jars folder:		String settingsDir = jEdit.getSettingsDirectory();		if(settingsDir != null)		{			String toolsPath = constructPath(settingsDir, "jars",				"tools.jar");			paths.addElement(toolsPath);			if(new File(toolsPath).exists())			{				Log.log(Log.DEBUG, MiscUtilities.class,					"- is in the user's jars folder. Fine.");				// jEdit will load it automatically				return true;			}		} //}}}		//{{{ 3. Check whether it is in jEdit's system jars folder:		String jEditDir = jEdit.getJEditHome();		if(jEditDir != null)		{			String toolsPath = constructPath(jEditDir, "jars", "tools.jar");			paths.addElement(toolsPath);			if(new File(toolsPath).exists())			{				Log.log(Log.DEBUG, MiscUtilities.class,					"- is in jEdit's system jars folder. Fine.");				// jEdit will load it automatically				return true;			}		} //}}}		//{{{ 4. Check whether it is in <java.home>/lib:		String toolsPath = System.getProperty("java.home");		if(toolsPath.toLowerCase().endsWith(File.separator + "jre"))			toolsPath = toolsPath.substring(0, toolsPath.length() - 4);		toolsPath = constructPath(toolsPath, "lib", "tools.jar");		paths.addElement(toolsPath);		if(!(new File(toolsPath).exists()))		{			Log.log(Log.WARNING, MiscUtilities.class,				"Could not find tools.jar.\n"				+ "I checked the following locations:\n"				+ paths.toString());			return false;		} //}}}		//{{{ Load it, if not yet done:		EditPlugin.JAR jar = jEdit.getPluginJAR(toolsPath);		if(jar == null)		{			Log.log(Log.DEBUG, MiscUtilities.class,				"- adding " + toolsPath + " to jEdit plugins.");			try			{				jEdit.addPluginJAR(new EditPlugin.JAR(toolsPath,					new JARClassLoader(toolsPath)));			}			catch(IOException ioex)			{				Log.log(Log.ERROR, MiscUtilities.class,					"- I/O error loading " + toolsPath);				Log.log(Log.ERROR, MiscUtilities.class, ioex);				return false;			}		}		else			Log.log(Log.DEBUG, MiscUtilities.class,				"- has been loaded before.");		//}}}		return true;	} //}}}	//{{{ parsePermissions() method	/**	 * Parse a Unix-style permission string (rwxrwxrwx).	 * @param str The string (must be 9 characters long).	 * @since jEdit 4.1pre8	 */	public static int parsePermissions(String s)	{		int permissions = 0;		if(s.length() == 9)		{			if(s.charAt(0) == 'r')				permissions += 0400;			if(s.charAt(1) == 'w')				permissions += 0200;			if(s.charAt(2) == 'x')				permissions += 0100;			else if(s.charAt(2) == 's')				permissions += 04100;			else if(s.charAt(2) == 'S')				permissions += 04000;			if(s.charAt(3) == 'r')				permissions += 040;			if(s.charAt(4) == 'w')				permissions += 020;			if(s.charAt(5) == 'x')				permissions += 010;			else if(s.charAt(5) == 's')				permissions += 02010;			else if(s.charAt(5) == 'S')				permissions += 02000;			if(s.charAt(6) == 'r')				permissions += 04;			if(s.charAt(7) == 'w')				permissions += 02;			if(s.charAt(8) == 'x')				permissions += 01;			else if(s.charAt(8) == 't')				permissions += 01001;			else if(s.charAt(8) == 'T')				permissions += 01000;		}		return permissions;	} //}}}	//{{{ Private members	private MiscUtilities() {}	//{{{ resolveSymlinks() method	private static String resolveSymlinks(String path)	{		try		{			return new File(path).getCanonicalPath();		}		catch(IOException io)		{			return path;		}	} //}}}	//}}}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -