/* * This file is part of JGAP. * * JGAP offers a dual license model containing the LGPL as well as the MPL. * * For licensing information please see the file license.txt included with JGAP * or have a look at the top of class org.jgap.Chromosome which representatively * includes the JGAP license policy applicable for any file delivered with JGAP. */ package org.jgap.util; import java.io.*; import org.apache.commons.codec.net.*; import org.apache.commons.codec.*; /** * String-related utility functions. * * @author Klaus Meffert * @since 3.2 */ public class StringKit { /** String containing the CVS revision. Read out via reflection!*/ private final static String CVS_REVISION = "$Revision: 1.2 $"; /** * Encodes a string. * * @param a_string the string to encode * @return encoded string * * @author Klaus Meffert * @since 3.2 */ public static String encode(String a_string) { try { return new URLCodec().encode(a_string, "UTF-8"); } catch (UnsupportedEncodingException uex) { throw new Error("UTF-8 encoding should always be supported!"); } } /** * Decodes an encoded string. * * @param a_string the encoded string to decode * @return decoded string * * @author Klaus Meffert * @since 3.2 */ public static String decode(String a_string) { try { return new URLCodec().decode(a_string, "UTF-8"); } catch (UnsupportedEncodingException uex) { throw new Error("UTF-8 encoding should always be supported!", uex); } catch (DecoderException dex) { throw new Error("UTF-8 encoding should always be supported!", dex); } } /** * Attempts to find a pattern in the given String. Taken from UUID * * @param in the String, may not be null * @return the substring that matches this pattern or null * * @since 3.3.3 */ public static String parse(String in) { // lanscan int hexStart = in.indexOf("0x"); if (hexStart != -1 && in.indexOf("ETHER") != -1) { int hexEnd = in.indexOf(' ', hexStart); if (hexEnd > hexStart + 2) { return in.substring(hexStart, hexEnd); } } int octets = 0; int lastIndex, old, end; if (in.indexOf('-') > -1) { in = in.replace('-', ':'); } lastIndex = in.lastIndexOf(':'); if (lastIndex > in.length() - 2) return null; end = Math.min(in.length(), lastIndex + 3); ++octets; old = lastIndex; while (octets != 5 && lastIndex != -1 && lastIndex > 1) { lastIndex = in.lastIndexOf(':', --lastIndex); if (old - lastIndex == 3 || old - lastIndex == 2) { ++octets; old = lastIndex; } } if (octets == 5 && lastIndex > 1) { return in.substring(lastIndex - 2, end).trim(); } return null; } /** * Fills a string with a given filler until length a_len is reached. * @param a_s String * @param a_len int * @param a_char char * @return result string * * @author Klaus Meffert * @since 3.3.3 */ public static String fill(String a_s, int a_len, char a_char) { String result = a_s; while (result.length() < a_len) { result += a_char; } return result; } /** * Removes all occurrences of a given char from a string * @param a_s the string * @param a_c the char to remove * @return result string * * @author Klaus Meffert * @since 3.3.3 */ public static String removeChar(String a_s, char a_c) { String result = a_s; if (result != null) { result = result.replaceAll("" + a_c, ""); } return result; } }