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

📄 messageformats.java

📁 非常接近C/S操作方式的Java Ajax框架-ZK 用ZK框架使你的B/S应用程序更漂亮更易操作。 官网:www.zkoss.org
💻 JAVA
字号:
/* MessageFormats.java{{IS_NOTE	Purpose: 	Description: 	History:	2002/02/08 11:03:32, Create, Tom M. Yeh.}}IS_NOTECopyright (C) 2001 Potix Corporation. All Rights Reserved.{{IS_RIGHT	This program is distributed under GPL Version 2.0 in the hope that	it will be useful, but WITHOUT ANY WARRANTY.}}IS_RIGHT*/package org.zkoss.text;import java.util.LinkedList;import java.util.List;import java.util.Map;import java.util.HashMap;import java.util.LinkedHashMap;import java.util.Collection;import java.util.Locale;import java.net.InetAddress;import java.text.MessageFormat;import org.zkoss.lang.D;import org.zkoss.lang.Strings;import org.zkoss.util.Locales;/** * The message formatting relevant utilities. * * <p>See also java.text.MessageFormat. * * @author tomyeh */public class MessageFormats {	/** Creates a MessageFormat with the given pattern and uses it to	 * format the given arguments.	 *	 * <p>An extension to java.text.MessageFormat.format by allowing	 * to specify a Locale.	 *	 * @param locale the locale; null for {@link Locales#getCurrent}	 */	public static final String	format(String pattern, Object[] args, Locale locale) {		return getFormat(pattern, locale)			.format(args, new StringBuffer(), null).toString();	}	private static MessageFormat getFormat(String pattern, Locale locale) {		if (locale == null)			locale = getLocale();		return new MessageFormat(pattern, locale);	}	private static final Locale getLocale() {		return Locales.getCurrent();	}	/** Creates a MessageFormat with the given pattern and uses it to	 * format the given arguments, by use of	 * {@link Locales#getCurrent}.	 *	 * <p>Note: java.text.MessageFormat.format uses Locale.getDefault,	 * which might not be corrent in a multi-user environment.	 */	public static final String format(String pattern, Object[] args) {		return format(pattern, args, null);	}	/** Creates a MessageFormat with the given pattern and uses it to	 * format the given arguments, by use of StringBuffer.	 *	 * <p>If you want to catenate a sequence of formated string, use	 * this method.	 */	public static final StringBuffer format(	StringBuffer result, String pattern, Object[] args, Locale locale) {		return getFormat(pattern, locale).format(args, result, null);	}	/** Creates a MessageFormat with the given pattern and uses it to	 * format the given arguments, by use of StringBuffer and	 * {@link Locales#getCurrent}.	 */	public static final StringBuffer format(	StringBuffer result, String pattern, Object[] args) {		return format(result, pattern, args, null);	}	/** Parses a pattern and converts it to the format of	 * java.text.MessageFormat.	 * Names are the first element of a substring enclosing with {}	 * in the pattern.	 *	 * <p>Example: "{a} is {b,number} of {a}" will return	 * <code>new NameInfo("{0} is {1,number} of {0}", {"a", "b"})</code>.	 *	 * @see #formatByName(String, Map, Locale)	 */	public static final NameInfo parseByName(String pattern) {		final Map names = new LinkedHashMap();		final int len = pattern.length();		final StringBuffer sb = new StringBuffer(len + 32);		int j = 0;		for (;;) {			final int k = Strings.anyOf(pattern, "'{", j);			if (k >= len) //not found				break; //done			final char cc = pattern.charAt(k);			if (cc == '\'') {				final int l = pattern.indexOf('\'', k + 1);				if (l < 0) //not found					break; //done				sb.append(pattern.substring(j, l + 1));				j = l + 1;			} else {				final int l = Strings.anyOf(pattern, ",}", k + 1);				if (l >= len) //not found					break; //done				final int m = pattern.indexOf('}', l);				if (m < 0) //not found					break; //done				final String nm = pattern.substring(k + 1, l);				Integer pos = (Integer)names.get(nm);				if (pos == null) {					pos = new Integer(names.size());					names.put(nm, pos);				}				sb.append(pattern.substring(j, k + 1))					.append(pos).append(pattern.substring(l, m + 1));				j = m + 1;			}		}		if (j < len)			sb.append(pattern.substring(j));		return new NameInfo(sb.toString(), names.keySet());	}	/** The name info returned by {@link #parseByName}).	 */	public static class NameInfo {		/** The pattern in the format of java.text.MessageFormat. */		public final String pattern;		/** The name of relative position. */		public final String[] names;		NameInfo(String pattern, Collection names) {			this.pattern = pattern;			this.names = (String[])names.toArray(new String[names.size()]);		}		NameInfo(String pattern, String[] names) {			this.pattern = pattern;			this.names = names;		}	}	/** Formats a pattern by substituting names, enclosing with {}, with	 * values found in the giving map.	 *	 * <p>This is an extension to java.text.MessageFormat.	 * The only difference is that this method use arbitrary name	 * instead of a number. For example, it use {name} instead of {0}.	 * The quotation rule and formating pattern are the same as	 * java.text.MessageFormat. Example, {var,number,$'#',###}.	 *	 * <p>It actually uses {@link #parseByName} to convert names to numbers,	 * and then passes to java.text.MessageFormat.	 *	 * @param locale the locale; null for	 * {@link Locales#getCurrent}	 * @exception IllegalArgumentException if the pattern is invalid	 * @see #parseByName	 */	public static final String	formatByName(String pattern, Map mapping, Locale locale) {		final NameInfo ni = parseByName(pattern);		final Object[] args = new Object[ni.names.length];		for (int j = args.length; --j >= 0;)			args[j] = mapping.get(ni.names[j]);		return format(ni.pattern, args, locale);	}	/** Formats a pattern by substituting names with values found in	 * the giving map, by use of	 * {@link Locales#getCurrent}.	 *	 * @see #parseByName	 */	public static final String formatByName(String pattern, Map mapping) {		return formatByName(pattern, mapping, null);	}}

⌨️ 快捷键说明

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