org.apache.nutch.util.StringUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.nutch.util.StringUtil.java

Source

/**
 * 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.
 */

package org.apache.nutch.util;

import java.nio.ByteBuffer;

import org.apache.commons.lang.Validate;
import org.apache.commons.lang3.StringUtils;

/**
 * A collection of String processing utility methods.
 */
public class StringUtil {

    /**
     * Returns a copy of <code>s</code> padded with trailing spaces so that it's
     * length is <code>length</code>. Strings already <code>length</code>
     * characters long or longer are not altered.
     */
    public static String rightPad(String s, int length) {
        StringBuffer sb = new StringBuffer(s);
        for (int i = length - s.length(); i > 0; i--)
            sb.append(" ");
        return sb.toString();
    }

    /**
     * Returns a copy of <code>s</code> padded with leading spaces so that it's
     * length is <code>length</code>. Strings already <code>length</code>
     * characters long or longer are not altered.
     */
    public static String leftPad(String s, int length) {
        StringBuffer sb = new StringBuffer();
        for (int i = length - s.length(); i > 0; i--)
            sb.append(" ");
        sb.append(s);
        return sb.toString();
    }

    private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
            'e', 'f' };

    /**
     * Convenience call for {@link #toHexString(ByteBuffer, String, int)}, where
     * <code>sep = null; lineLen = Integer.MAX_VALUE</code>.
     * 
     * @param buf
     */
    public static String toHexString(ByteBuffer buf) {
        return toHexString(buf, null, Integer.MAX_VALUE);
    }

    /**
     * Get a text representation of a ByteBuffer as hexadecimal String, where each
     * pair of hexadecimal digits corresponds to consecutive bytes in the array.
     * 
     * @param buf
     *          input data
     * @param sep
     *          separate every pair of hexadecimal digits with this separator, or
     *          null if no separation is needed.
     * @param lineLen
     *          break the output String into lines containing output for lineLen
     *          bytes.
     */
    public static String toHexString(ByteBuffer buf, String sep, int lineLen) {
        return toHexString(buf.array(), buf.arrayOffset() + buf.position(), buf.remaining(), sep, lineLen);
    }

    /**
     * Convenience call for {@link #toHexString(byte[], String, int)}, where
     * <code>sep = null; lineLen = Integer.MAX_VALUE</code>.
     * 
     * @param buf
     */
    public static String toHexString(byte[] buf) {
        return toHexString(buf, null, Integer.MAX_VALUE);
    }

    /**
     * Get a text representation of a byte[] as hexadecimal String, where each
     * pair of hexadecimal digits corresponds to consecutive bytes in the array.
     * 
     * @param buf
     *          input data
     * @param sep
     *          separate every pair of hexadecimal digits with this separator, or
     *          null if no separation is needed.
     * @param lineLen
     *          break the output String into lines containing output for lineLen
     *          bytes.
     */
    public static String toHexString(byte[] buf, String sep, int lineLen) {
        return toHexString(buf, 0, buf.length, sep, lineLen);
    }

    /**
     * Get a text representation of a byte[] as hexadecimal String, where each
     * pair of hexadecimal digits corresponds to consecutive bytes in the array.
     * 
     * @param buf
     *          input data
     * @param of
     *          the offset into the byte[] to start reading
     * @param cb
     *          the number of bytes to read from the byte[]
     * @param sep
     *          separate every pair of hexadecimal digits with this separator, or
     *          null if no separation is needed.
     * @param lineLen
     *          break the output String into lines containing output for lineLen
     *          bytes.
     */
    public static String toHexString(byte[] buf, int of, int cb, String sep, int lineLen) {
        if (buf == null)
            return null;
        if (lineLen <= 0)
            lineLen = Integer.MAX_VALUE;
        StringBuffer res = new StringBuffer(cb * 2);
        for (int c = 0; c < cb; c++) {
            int b = buf[of++];
            res.append(HEX_DIGITS[(b >> 4) & 0xf]);
            res.append(HEX_DIGITS[b & 0xf]);
            if (c > 0 && (c % lineLen) == 0)
                res.append('\n');
            else if (sep != null && c < lineLen - 1)
                res.append(sep);
        }
        return res.toString();
    }

    /**
     * Convert a String containing consecutive (no inside whitespace) hexadecimal
     * digits into a corresponding byte array. If the number of digits is not
     * even, a '0' will be appended in the front of the String prior to
     * conversion. Leading and trailing whitespace is ignored.
     * 
     * @param text
     *          input text
     * @return converted byte array, or null if unable to convert
     */
    public static byte[] fromHexString(String text) {
        text = text.trim();
        if (text.length() % 2 != 0)
            text = "0" + text;
        int resLen = text.length() / 2;
        int loNibble, hiNibble;
        byte[] res = new byte[resLen];
        for (int i = 0; i < resLen; i++) {
            int j = i << 1;
            hiNibble = charToNibble(text.charAt(j));
            loNibble = charToNibble(text.charAt(j + 1));
            if (loNibble == -1 || hiNibble == -1)
                return null;
            res[i] = (byte) (hiNibble << 4 | loNibble);
        }
        return res;
    }

    private static final int charToNibble(char c) {
        if (c >= '0' && c <= '9') {
            return c - '0';
        } else if (c >= 'a' && c <= 'f') {
            return 0xa + (c - 'a');
        } else if (c >= 'A' && c <= 'F') {
            return 0xA + (c - 'A');
        } else {
            return -1;
        }
    }

    /**
     * Checks if a string is empty (ie is null or empty).
     */
    public static boolean isEmpty(String str) {
        return (str == null) || (str.equals(""));
    }

    /**
     * Takes in a String value and cleans out any offending ""
     * 
     * @param value
     *          the dirty String value.
     * @return clean String
     */
    public static String cleanField(String value) {
        return value.replaceAll("", "");
    }

    public static int tryParseInt(String s) {
        return tryParseInt(s, 0);
    }

    public static int tryParseInt(String s, int defaultValue) {
        int r = defaultValue;

        try {
            r = Integer.parseInt(s);
        } catch (Exception e) {
        }

        return r;
    }

    public static boolean contains(String text, CharSequence... searchCharSequences) {
        Validate.notNull(searchCharSequences);

        for (CharSequence search : searchCharSequences) {
            if (!text.contains(search))
                return false;
        }

        return true;
    }

    public static boolean containsAny(String text, CharSequence... searchCharSequences) {
        Validate.notNull(searchCharSequences);

        for (CharSequence search : searchCharSequences) {
            if (text.contains(search))
                return true;
        }

        return false;
    }

    public static boolean containsNone(String text, CharSequence... searchCharSequences) {
        Validate.notNull(searchCharSequences);

        for (CharSequence search : searchCharSequences) {
            if (text.contains(search))
                return false;
        }

        return true;
    }

    public static void main(String[] args) {
        String counterName = "[beta_test_5]FetcherJob";
        counterName = StringUtils.substringBeforeLast(counterName, "-");
        System.out.println(counterName);

        counterName = counterName.replaceAll("(\\[.+\\])", "");
        counterName = "counter." + counterName;
        System.out.println(counterName);
    }
}