Java/Data Type/String Escape

Материал из Java эксперт
Перейти к: навигация, поиск

Ends With Ignore Case

   <source lang="java">
   

// // Copyright 2004-2005 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // Licensed 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. //

// /** Fast String Utilities.

*
* These string utilities provide both conveniance methods and
* performance improvements over most standard library versions. The
* main aim of the optimizations is to avoid object creation unless
* absolutely required.
*
* @author Greg Wilkins (gregw)
*/

class StringUtil {

   public static final String CRLF="\015\012";
   public static final String __LINE_SEPARATOR=
       System.getProperty("line.separator","\n");
   
   public static String __ISO_8859_1;
   static
   {
       String iso=System.getProperty("ISO_8859_1");
       if (iso!=null)
           __ISO_8859_1=iso;
       else
       {
           try{
               new String(new byte[]{(byte)20},"ISO-8859-1");
               __ISO_8859_1="ISO-8859-1";
           }
           catch(java.io.UnsupportedEncodingException e)
           {
               __ISO_8859_1="ISO8859_1";
           }        
       }
   }
   
   public final static String __UTF8="UTF-8";
   
   
   private static char[] lowercases = {
         "\000","\001","\002","\003","\004","\005","\006","\007",
         "\010","\011","\012","\013","\014","\015","\016","\017",
         "\020","\021","\022","\023","\024","\025","\026","\027",
         "\030","\031","\032","\033","\034","\035","\036","\037",
         "\040","\041","\042","\043","\044","\045","\046","\047",
         "\050","\051","\052","\053","\054","\055","\056","\057",
         "\060","\061","\062","\063","\064","\065","\066","\067",
         "\070","\071","\072","\073","\074","\075","\076","\077",
         "\100","\141","\142","\143","\144","\145","\146","\147",
         "\150","\151","\152","\153","\154","\155","\156","\157",
         "\160","\161","\162","\163","\164","\165","\166","\167",
         "\170","\171","\172","\133","\134","\135","\136","\137",
         "\140","\141","\142","\143","\144","\145","\146","\147",
         "\150","\151","\152","\153","\154","\155","\156","\157",
         "\160","\161","\162","\163","\164","\165","\166","\167",
         "\170","\171","\172","\173","\174","\175","\176","\177" };
   /* ------------------------------------------------------------ */
   public static boolean endsWithIgnoreCase(String s,String w)
   {
       if (w==null)
           return true;
       if (s==null)
           return false;
           
       int sl=s.length();
       int wl=w.length();
       
       if (sl<wl)
           return false;
       
       for (int i=wl;i-->0;)
       {
           char c1=s.charAt(--sl);
           char c2=w.charAt(i);
           if (c1!=c2)
           {
               if (c1<=127)
                   c1=lowercases[c1];
               if (c2<=127)
                   c2=lowercases[c2];
               if (c1!=c2)
                   return false;
           }
       }
       return true;
   }

}



 </source>
   
  
 
  



Escape commas in the string using the default escape char

   <source lang="java">
   

/**

* 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.io.PrintWriter; import java.io.StringWriter; import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; import java.net.UnknownHostException; import java.text.DateFormat; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.StringTokenizer; import java.util.Collection;

/**

* General string utils
*/

public class StringUtils {

 final public static char COMMA = ",";
 final public static String COMMA_STR = ",";
 final public static char ESCAPE_CHAR = "\\";
 /**
  * Escape commas in the string using the default escape char
  * @param str a string
  * @return an escaped string
  */
 public static String escapeString(String str) {
   return escapeString(str, ESCAPE_CHAR, COMMA);
 }
 
 /**
  * Escape charToEscape in the string 
  * with the escape char escapeChar
  * 
  * @param str string
  * @param escapeChar escape char
  * @param charToEscape the char to be escaped
  * @return an escaped string
  */
 public static String escapeString(String str, char escapeChar, char charToEscape) {
   if (str == null) {
     return null;
   }
   StringBuilder result = new StringBuilder();
   for (int i=0; i<str.length(); i++) {
     char curChar = str.charAt(i);
     if (curChar == escapeChar || curChar == charToEscape) {
       // special char
       result.append(escapeChar);
     }
     result.append(curChar);
   }
   return result.toString();
 }

}



 </source>
   
  
 
  



Escapes characters that have special meaning to regular expressions

   <source lang="java">
   

/*

* Static String formatting and query routines.
* Copyright (C) 2001-2005 Stephen Ostermiller
* http://ostermiller.org/contact.pl?regarding=Java+Utilities
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* See COPYING.TXT for details.
*/

import java.util.HashMap; import java.util.regex.Pattern; /**

* Utilities for String formatting, manipulation, and queries.
* More information about this class is available from .
*
* @author Stephen Ostermiller http://ostermiller.org/contact.pl?regarding=Java+Utilities
* @since ostermillerutils 1.00.00
*/

public class StringHelper {

 /**
  * Escapes characters that have special meaning to
  * regular expressions
  *
  * @param s String to be escaped
  * @return escaped String
  * @throws NullPointerException if s is null.
  *
  * @since ostermillerutils 1.02.25
  */
 public static String escapeRegularExpressionLiteral(String s){
   // According to the documentation in the Pattern class:
   //
   // The backslash character ("\") serves to introduce escaped constructs,
   // as defined in the table above, as well as to quote characters that
   // otherwise would be interpreted as unescaped constructs. Thus the
   // expression \\ matches a single backslash and \{ matches a left brace.
   //
   // It is an error to use a backslash prior to any alphabetic character
   // that does not denote an escaped construct; these are reserved for future
   // extensions to the regular-expression language. A backslash may be used
   // prior to a non-alphabetic character regardless of whether that character
   // is part of an unescaped construct.
   //
   // As a result, escape everything except [0-9a-zA-Z]
   int length = s.length();
   int newLength = length;
   // first check for characters that might
   // be dangerous and calculate a length
   // of the string that has escapes.
   for (int i=0; i<length; i++){
     char c = s.charAt(i);
     if (!((c>="0" && c<="9") || (c>="A" && c<="Z") || (c>="a" && c<="z"))){
       newLength += 1;
     }
   }
   if (length == newLength){
     // nothing to escape in the string
     return s;
   }
   StringBuffer sb = new StringBuffer(newLength);
   for (int i=0; i<length; i++){
     char c = s.charAt(i);
     if (!((c>="0" && c<="9") || (c>="A" && c<="Z") || (c>="a" && c<="z"))){
       sb.append("\\");
     }
     sb.append(c);
   }
   return sb.toString();
 }

}



 </source>
   
  
 
  



Quote string

   <source lang="java">
  

/*

*  soapUI, copyright (C) 2004-2009 eviware.ru 
*
*  soapUI is free software; you can redistribute it and/or modify it under the 
*  terms of version 2.1 of the GNU Lesser General Public License as published by 
*  the Free Software Foundation.
*
*  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
*  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
*  See the GNU Lesser General Public License for more details at gnu.org.
*/

public class Utils {

 public static String quote( String str )
 {
   if( str == null )
     return str;
   if( str.length() < 2 || !str.startsWith( "\"" ) || !str.endsWith( "\"" ) )
     str = "\"" + str + "\"";
   return str;
 }

}


 </source>
   
  
 
  



Removes the double quote from the start and end of the supplied string if it starts and ends with this character

   <source lang="java">
  

/*

* Copyright Aduna (http://www.aduna-software.ru/) (c) 1997-2006.
*
* Licensed under the Aduna BSD-style license.
*/

public class StringUtil {

 /**
  * Removes the double quote from the start and end of the supplied string if
  * it starts and ends with this character. This method does not create a new
  * string if text doesn"t start and end with double quotes, the
  * text object itself is returned in that case.
  * 
  * @param text
  *        The string to remove the double quotes from.
  * @return The trimmed string, or a reference to text if it did
  *         not start and end with double quotes.
  */
 public static String trimDoubleQuotes(String text) {
   int textLength = text.length();
   if (textLength >= 2 && text.charAt(0) == """ && text.charAt(textLength - 1) == """) {
     return text.substring(1, textLength - 1);
   }
   return text;
 }

} // end class


 </source>
   
  
 
  



unEscape String

   <source lang="java">
   

/**

* 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.io.PrintWriter; import java.io.StringWriter; import java.net.InetAddress; import java.net.URI; import java.net.URISyntaxException; import java.net.UnknownHostException; import java.text.DateFormat; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.StringTokenizer; import java.util.Collection;

/**

* General string utils
*/

public class StringUtils {

 /**
  * Unescape charToEscape in the string 
  * with the escape char escapeChar
  * 
  * @param str string
  * @param escapeChar escape char
  * @param charToEscape the escaped char
  * @return an unescaped string
  */
 public static String unEscapeString(
     String str, char escapeChar, char charToEscape) {
   if (str == null) {
     return null;
   }
   StringBuilder result = new StringBuilder(str.length());
   boolean hasPreEscape = false;
   for (int i=0; i<str.length(); i++) {
     char curChar = str.charAt(i);
     if (hasPreEscape) {
       if (curChar != escapeChar && curChar != charToEscape) {
         // no special char
         throw new IllegalArgumentException("Illegal escaped string " + str + 
             " unescaped " + escapeChar + " at " + (i-1));
       } 
       // otherwise discard the escape char
       result.append(curChar);
       hasPreEscape = false;
     } else {
       if (curChar == charToEscape) {
         throw new IllegalArgumentException("Illegal escaped string " + str + 
             " unescaped " + charToEscape + " at " + i);
       } else if (curChar == escapeChar) {
         hasPreEscape = true;
       } else {
         result.append(curChar);
       }
     }
   }
   if (hasPreEscape ) {
     throw new IllegalArgumentException("Illegal escaped string " + str + 
         ", not expecting " + charToEscape + " in the end." );
   }
   return result.toString();
 }
 
 

}



 </source>
   
  
 
  



Unquote string

   <source lang="java">
  

/*

*  soapUI, copyright (C) 2004-2009 eviware.ru 
*
*  soapUI is free software; you can redistribute it and/or modify it under the 
*  terms of version 2.1 of the GNU Lesser General Public License as published by 
*  the Free Software Foundation.
*
*  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
*  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
*  See the GNU Lesser General Public License for more details at gnu.org.
*/

public class Utils {

 public static String unquote( String str )
 {
   int length = str == null ? -1 : str.length();
   if( str == null || length == 0 )
     return str;
   if( length > 1 && str.charAt( 0 ) == "\"" && str.charAt( length - 1 ) == "\"" )
   {
     str = str.substring( 1, length - 1 );
   }
   return str;
 }

}


 </source>