Liferay7 BPM门户开发之30: 通用帮助类ValidatorArrayUtilStringUtil等使用
Posted 昕友软件开发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Liferay7 BPM门户开发之30: 通用帮助类ValidatorArrayUtilStringUtil等使用相关的知识,希望对你有一定的参考价值。
废话不多说,直接上代码。
验证类Validator
主要是空验证、数字、格式验证
调用的例子:
protected void validateEmailFrom(ActionRequest actionRequest){ String emailFromName = getParameter(actionRequest, "emailFromName"); String emailFromAddress = getParameter( actionRequest, "emailFromAddress"); if (Validator.isNull(emailFromName)) { SessionErrors.add(actionRequest, "emailFromName"); } else if (!Validator.isEmailAddress(emailFromAddress) && !Validator.isVariableTerm(emailFromAddress)) { SessionErrors.add(actionRequest, "emailFromAddress"); } }
数组工具类,ArrayUtil
主要的操作是:
源代码实现分析1、去除重复值,如
public static String[] distinct(String[] array) { return distinct(array, null); } public static String[] distinct( String[] array, Comparator<String> comparator) { if ((array == null) || (array.length == 0)) { return array; } Set<String> set = null; if (comparator == null) { set = new TreeSet<String>(); } else { set = new TreeSet<String>(comparator); } for (int i = 0; i < array.length; i++) { String s = array[i]; if (!set.contains(s)) { set.add(s); } } return set.toArray(new String[set.size()]); }
源代码实现分析2、尾部增加项,比如:
public static Float[] append(Float[] array, Float obj) { Float[] newArray = new Float[array.length + 1]; System.arraycopy(array, 0, newArray, 0, array.length); newArray[newArray.length - 1] = obj; return newArray; }
3、JSONArray、Object和Array转换,如:
static String[] toStringArray(JSONArray array) static String[] toStringArray(Object[] array)
字符串工具StringUtil
一个例子,用于字符替换,同时也使用了StringPool
protected Map<String, String> getJSONValues(
JSONArray data, String namespace, String id) {
Map<String, String> values = new HashMap<String, String>(data.length());
for (int i = 0; i < data.length(); i++) {
JSONObject jsonObject = data.getJSONObject(i);
String name = jsonObject.getString("name");
name = StringUtil.replace(
name, new String[] {namespace, id},
new String[] {StringPool.BLANK, StringPool.BLANK});
values.put(name, jsonObject.getString("value"));
}
return values;
}
StringUtil源代码,有兴趣可以研究
package com.liferay.portal.kernel.util; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; import java.util.List; import java.util.Map; import java.util.StringTokenizer; public class StringUtil { public static String add(String s, String add) { return add(s, add, StringPool.COMMA); } public static String add(String s, String add, String delimiter) { return add(s, add, delimiter, false); } public static String add( String s, String add, String delimiter, boolean allowDuplicates) { if ((add == null) || (delimiter == null)) { return null; } if (s == null) { s = StringPool.BLANK; } if (allowDuplicates || !contains(s, add, delimiter)) { StringBuilder sb = new StringBuilder(); sb.append(s); if (Validator.isNull(s) || s.endsWith(delimiter)) { sb.append(add); sb.append(delimiter); } else { sb.append(delimiter); sb.append(add); sb.append(delimiter); } s = sb.toString(); } return s; } public static String bytesToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(bytes.length * 2); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString( 0x0100 + (bytes[i] & 0x00FF)).substring(1); if (hex.length() < 2) { sb.append("0"); } sb.append(hex); } return sb.toString(); } public static boolean contains(String s, String text) { return contains(s, text, StringPool.COMMA); } public static boolean contains(String s, String text, String delimiter) { if ((s == null) || (text == null) || (delimiter == null)) { return false; } StringBuilder sb = null; if (!s.endsWith(delimiter)) { sb = new StringBuilder(); sb.append(s); sb.append(delimiter); s = sb.toString(); } sb = new StringBuilder(); sb.append(delimiter); sb.append(text); sb.append(delimiter); String dtd = sb.toString(); int pos = s.indexOf(dtd); if (pos == -1) { sb = new StringBuilder(); sb.append(text); sb.append(delimiter); String td = sb.toString(); if (s.startsWith(td)) { return true; } return false; } return true; } public static int count(String s, String text) { if ((s == null) || (text == null)) { return 0; } int count = 0; int pos = s.indexOf(text); while (pos != -1) { pos = s.indexOf(text, pos + text.length()); count++; } return count; } public static boolean endsWith(String s, char end) { return endsWith(s, (new Character(end)).toString()); } public static boolean endsWith(String s, String end) { if ((s == null) || (end == null)) { return false; } if (end.length() > s.length()) { return false; } String temp = s.substring(s.length() - end.length(), s.length()); if (temp.equalsIgnoreCase(end)) { return true; } else { return false; } } public static String extractChars(String s) { if (s == null) { return StringPool.BLANK; } StringBuilder sb = new StringBuilder(); char[] c = s.toCharArray(); for (int i = 0; i < c.length; i++) { if (Validator.isChar(c[i])) { sb.append(c[i]); } } return sb.toString(); } public static String extractDigits(String s) { if (s == null) { return StringPool.BLANK; } StringBuilder sb = new StringBuilder(); char[] c = s.toCharArray(); for (int i = 0; i < c.length; i++) { if (Validator.isDigit(c[i])) { sb.append(c[i]); } } return sb.toString(); } public static String extractFirst(String s, String delimiter) { if (s == null) { return null; } else { String[] array = split(s, delimiter); if (array.length > 0) { return array[0]; } else { return null; } } } public static String extractLast(String s, String delimiter) { if (s == null) { return null; } else { String[] array = split(s, delimiter); if (array.length > 0) { return array[array.length - 1]; } else { return null; } } } public static String highlight(String s, String keywords) { return highlight(s, keywords, "<span class=\\"highlight\\">", "</span>"); } public static String highlight( String s, String keywords, String highlight1, String highlight2) { if (s == null) { return null; } // The problem with using a regexp is that it searches the text in a // case insenstive manner but doens\'t replace the text in a case // insenstive manner. So the search results actually get messed up. The // best way is to actually parse the results. //return s.replaceAll( // "(?i)" + keywords, highlight1 + keywords + highlight2); StringBuilder sb = new StringBuilder(StringPool.SPACE); StringTokenizer st = new StringTokenizer(s); while (st.hasMoreTokens()) { String token = st.nextToken(); if (token.equalsIgnoreCase(keywords)) { sb.append(highlight1); sb.append(token); sb.append(highlight2); } else { sb.append(token); } if (st.hasMoreTokens()) { sb.append(StringPool.SPACE); } } return sb.toString(); } public static String lowerCase(String s) { if (s == null) { return null; } else { return s.toLowerCase(); } } public static String merge(boolean[] array) { return merge(array, StringPool.COMMA); } public static String merge(boolean[] array, String delimiter) { if (array == null) { return null; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < array.length; i++) { sb.append(String.valueOf(array[i]).trim()); if ((i + 1) != array.length) { sb.append(delimiter); } } return sb.toString(); } public static String merge(double[] array) { return merge(array, StringPool.COMMA); } public static String merge(double[] array, String delimiter) { if (array == null) { return null; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < array.length; i++) { sb.append(String.valueOf(array[i]).trim()); if ((i + 1) != array.length) { sb.append(delimiter); } } return sb.toString(); } public static String merge(float[] array) { return merge(array, StringPool.COMMA); } public static String merge(float[] array, String delimiter) { if (array == null) { return null; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < array.length; i++) { sb.append(String.valueOf(array[i]).trim()); if ((i + 1) != array.length) { sb.append(delimiter); } } return sb.toString(); } public static String merge(int[] array) { return merge(array, StringPool.COMMA); } public static String merge(int[] array, String delimiter) { if (array == null) { return null; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < array.length; i++) { sb.append(String.valueOf(array[i]).trim()); if ((i + 1) != array.length) { sb.append(delimiter); } } return sb.toString(); } public static String merge(long[] array) { return merge(array, StringPool.COMMA); } public static String merge(long[] array, String delimiter) { if (array == null) { return null; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < array.length; i++) { sb.append(String.valueOf(array[i]).trim()); if ((i + 1) != array.length) { sb.append(delimiter); } } return sb.toString(); } public static String merge(short[] array) { return merge(array, StringPool.COMMA); } public static String merge(short[] array, String delimiter) { if (array == null) { return null; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < array.length; i++) { sb.append(String.valueOf(array[i]).trim()); if ((i + 1) != array.length) { sb.append(delimiter); } } return sb.toString(); } public static String merge(Collection<?> col) { return merge(col, StringPool.COMMA); } public static String merge(Collection<?> col, String delimiter) { return merge(col.toArray(new Object[col.size()]), delimiter); } public static String merge(Object[] array) { return merge(array, StringPool.COMMA); } public static String merge(Object[] array, String delimiter) { if (array == null) { return null; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < array.length; i++) { sb.append(String.valueOf(array[i]).trim()); if ((i + 1) != array.length) { sb.append(delimiter); } } return sb.toString(); } public static String randomize(String s) { return Randomizer.getInstance().randomize(s); } public static String read(ClassLoader classLoader, String name) throws IOException { return read(classLoader, name, false); } public static String read(ClassLoader classLoader, String name, boolean all) throws IOException { if (all) { StringBuilder sb = new StringBuilder(); Enumeration<URL> enu = classLoader.getResources(name); while (enu.hasMoreElements()) { URL url = enu.nextElement(); InputStream is = url.openStream(); String s = read(is); if (s != null) { sb.append(s); sb.append(StringPool.NEW_LINE); } is.close(); } return sb.toString().trim(); } else { InputStream is = classLoader.getResourceAsStream(name); String s = read(is); is.close(); return s; } } public static String read(InputStream is) throws IOException { StringBuilder sb = new StringBuilder(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String line = null; while ((line = br.readLine()) != null) { sb.append(line).append(\'\\n\'); } br.close(); return sb.toString().trim(); } public static String remove(String s, String remove) { return remove(s, remove, StringPool.COMMA); } public static String remove(String s, String remove, String delimiter) { if ((s == null) || (remove == null) || (delimiter == null)) { return null; } if (Validator.isNotNull(s) && !s.endsWith(delimiter)) { s += delimiter; } StringBuilder sb = new StringBuilder(); sb.append(delimiter); sb.append(remove); sb.append(delimiter); String drd = sb.toString(); sb = new StringBuilder(); sb.append(remove); sb.append(delimiter); String rd = sb.toString(); while (contains(s, remove, delimiter)) { int pos = s.indexOf(drd); if (pos == -1) { if (s.startsWith(rd)) { int x = remove.length() + delimiter.length(); int y = s.length(); s = s.substring(x, y); } } else { int x = pos + remove.length() + delimiter.length(); int y = s.length(); sb = new StringBuilder(); sb.append(s.substring(0, pos)); sb.append(s.substring(x, y)); s = sb.toString(); } } return s; } public static String replace(String s, char oldSub, char newSub) { if (s == null) { return null; } return s.replace(oldSub, newSub); } public static String replace(String s, char oldSub, String newSub) { if ((s == null) || (newSub == null)) { return null; } // The number 5 is arbitrary and is used as extra padding to reduce // buffer expansion StringBuilder sb = new StringBuilder(s.length() + 5 * newSub.length()); char[] charArray = s.toCharArray(); for (char c : charArray) { if (c == oldSub) { sb.append(newSub); } else { sb.append(c); } } return sb.toString(); } public static String replace(String s, String oldSub, String newSub) { if ((s == null) || (oldSub == null) || (newSub == null)) { return null; } int y = s.indexOf(oldSub); if (y >= 0) { // The number 5 is arbitrary and is used as extra padding to reduce // buffer expansion StringBuilder sb = new StringBuilder( s.length() + 5 * newSub.length()); int length = oldSub.length(); int x = 0; while (x <= y) { sb.append(s.substring(x, y)); sb.append(newSub); x = y + length; y = s.indexOf(oldSub, x); } sb.append(s.substring(x)); return sb.toString(); } else { return s; } } public static String replace(String s, String[] oldSubs, String[] newSubs) { if ((s == null) || (oldSubs == null) || (newSubs == null)) { return null; } if (oldSubs.length != newSubs.length) { return s; } for (int i = 0; i < oldSubs.length; i++) { s = replace(s, oldSubs[i], newSubs[i]); } return s; } public static String replace( String s, String[] oldSubs, String[] newSubs, boolean exactMatch) { if ((s == null) || (oldSubs == null) || (newSubs == null)) { return null; } if (oldSubs.length != newSubs.length) { return s; } if (!exactMatch) { replace(s, oldSubs, newSubs); } else { for (int i = 0; i < oldSubs.length; i++) { s = s.replaceAll("\\\\b" + oldSubs[i] + "\\\\b" , newSubs[i]); } } return s; } /** * Returns a string with replaced values. This method will replace all text * in the given string, between the beginning and ending delimiter, with new * values found in the given map. For example, if the string contained the * text <code>[$HELLO$]</code>, and the beginning delimiter was * <code>[$]</code>, and the ending delimiter was <code>$]</code>, and the * values map had a key of <code>HELLO</code> that mapped to * <code>WORLD</code>, then the replaced string will contain the text * <code>[$WORLD$]</code>. * * @param s the original string * @param begin the beginning delimiter * @param end the ending delimiter * @param values a map of old and new values * @return a string with replaced values */ public static String replaceValues( String s, String begin, String end, Map<String, String> values) { if ((s == null) || (begin == null) || (end == null) || (values == null) || (values.size() == 0)) { return s; } StringBuilder sb = new StringBuilder(s.length()); int pos = 0; while (true) { int x = s.indexOf(begin, pos); int y = s.indexOf(end, x + begin.length()); if ((x == -1) || (y == -1)) { sb.append(s.substring(pos, s.length())); break; } else { sb.append(s.substring(pos, x + begin.length())); String oldValue = s.substring(x + begin.length(), y); String newValue = values.get(oldValue); if (newValue == null) { newValue = oldValue; } sb.append(newValue); pos = y; } } return sb.toString(); } public static String reverse(String s) { if (s == null) { return null; } char[] c = s.toCharArray(); char[] reverse = new char[c.length]; for (int i = 0; i < c.length; i++) { reverse[i] = c[c.length - i - 1]; } return new String(reverse); } public static String safePath(String path) { return replace(p以上是关于Liferay7 BPM门户开发之30: 通用帮助类ValidatorArrayUtilStringUtil等使用的主要内容,如果未能解决你的问题,请参考以下文章
Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发
Liferay7 BPM门户开发之17: Portlet 生命周期
Liferay7 BPM门户开发之3: Activiti开发环境搭建
Liferay7 BPM门户开发之14: Liferay开发体系简介