Java tutorial
//package com.java2s; /* * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by * applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. */ import java.util.Arrays; public class Main { /** * <p> * Quote and escape a String with the given character, handling <code>null</code>. * </p> * <p/> * * <pre> * StringUtils.quoteAndEscape(null, *) = null * StringUtils.quoteAndEscape("", *) = "" * StringUtils.quoteAndEscape("abc", '"') = abc * StringUtils.quoteAndEscape("a\"bc", '"') = "a\"bc" * StringUtils.quoteAndEscape("a\"bc", '\'') = 'a\"bc' * </pre> * * @param source * @param quoteChar * @return the String quoted and escaped * @see #quoteAndEscape(String, char, char[], char[], char, boolean) * @since 1.5.1 */ public static String quoteAndEscape(String source, char quoteChar) { return quoteAndEscape(source, quoteChar, new char[] { quoteChar }, new char[] { ' ' }, '\\', false); } /** * <p> * Quote and escape a String with the given character, handling <code>null</code>. * </p> * * @param source * @param quoteChar * @param quotingTriggers * @return the String quoted and escaped * @see #quoteAndEscape(String, char, char[], char[], char, boolean) * @since 1.5.1 */ public static String quoteAndEscape(String source, char quoteChar, char[] quotingTriggers) { return quoteAndEscape(source, quoteChar, new char[] { quoteChar }, quotingTriggers, '\\', false); } /** * @param source * @param quoteChar * @param escapedChars * @param escapeChar * @param force * @return the String quoted and escaped * @see #quoteAndEscape(String, char, char[], char[], char, boolean) * @since 1.5.1 */ public static String quoteAndEscape(String source, char quoteChar, final char[] escapedChars, char escapeChar, boolean force) { return quoteAndEscape(source, quoteChar, escapedChars, new char[] { ' ' }, escapeChar, force); } /** * @param source * @param quoteChar * @param escapedChars * @param quotingTriggers * @param escapeChar * @param force * @return the String quoted and escaped * @since 1.5.1 */ public static String quoteAndEscape(String source, char quoteChar, final char[] escapedChars, final char[] quotingTriggers, char escapeChar, boolean force) { if (source == null) { return null; } if (!force && source.startsWith(Character.toString(quoteChar)) && source.endsWith(Character.toString(quoteChar))) { return source; } String escaped = escape(source, escapedChars, escapeChar); boolean quote = false; if (force) { quote = true; } else if (!escaped.equals(source)) { quote = true; } else { for (int i = 0; i < quotingTriggers.length; i++) { if (escaped.indexOf(quotingTriggers[i]) > -1) { quote = true; break; } } } if (quote) { return quoteChar + escaped + quoteChar; } return escaped; } /** * <p> * Escapes any values it finds into their String form. * </p> * <p/> * <p> * So a tab becomes the characters <code>'\\'</code> and <code>'t'</code>. * </p> * * @param str String to escape values in * @return String with escaped values * @throws NullPointerException if str is <code>null</code> */ public static String escape(String str) { // improved with code from cybertiger@cyberiantiger.org // unicode from him, and defaul for < 32's. int sz = str.length(); StringBuilder buffer = new StringBuilder(2 * sz); for (int i = 0; i < sz; i++) { char ch = str.charAt(i); // handle unicode if (ch > 0xfff) { buffer.append("\\u" + Integer.toHexString(ch)); } else if (ch > 0xff) { buffer.append("\\u0" + Integer.toHexString(ch)); } else if (ch > 0x7f) { buffer.append("\\u00" + Integer.toHexString(ch)); } else if (ch < 32) { switch (ch) { case '\b': buffer.append('\\'); buffer.append('b'); break; case '\n': buffer.append('\\'); buffer.append('n'); break; case '\t': buffer.append('\\'); buffer.append('t'); break; case '\f': buffer.append('\\'); buffer.append('f'); break; case '\r': buffer.append('\\'); buffer.append('r'); break; default: if (ch > 0xf) { buffer.append("\\u00" + Integer.toHexString(ch)); } else { buffer.append("\\u000" + Integer.toHexString(ch)); } break; } } else { switch (ch) { case '\'': buffer.append('\\'); buffer.append('\''); break; case '"': buffer.append('\\'); buffer.append('"'); break; case '\\': buffer.append('\\'); buffer.append('\\'); break; default: buffer.append(ch); break; } } } return buffer.toString(); } /** * @param source * @param escapedChars * @param escapeChar * @return the String escaped * @since 1.5.1 */ public static String escape(String source, final char[] escapedChars, char escapeChar) { if (source == null) { return null; } char[] eqc = new char[escapedChars.length]; System.arraycopy(escapedChars, 0, eqc, 0, escapedChars.length); Arrays.sort(eqc); StringBuilder buffer = new StringBuilder(source.length()); @SuppressWarnings("unused") int escapeCount = 0; for (int i = 0; i < source.length(); i++) { final char c = source.charAt(i); int result = Arrays.binarySearch(eqc, c); if (result > -1) { buffer.append(escapeChar); escapeCount++; } buffer.append(c); } return buffer.toString(); } /** * <p> * Compares two Strings, returning <code>true</code> if they are equal. * </p> * <p/> * <p> * <code>null</code>s are handled without exceptions. Two <code>null</code> references are considered to be equal. * The comparison is case sensitive. * </p> * * @param str1 the first string * @param str2 the second string * @return <code>true</code> if the Strings are equal, case sensitive, or both <code>null</code> * @see java.lang.String#equals(Object) */ public static boolean equals(String str1, String str2) { return (str1 == null ? str2 == null : str1.equals(str2)); } }