All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.timewalker.ffmq4.utils.StringTools Maven / Gradle / Ivy

There is a newer version: 4.0.14
Show newest version
/*
 * This file is part of FFMQ.
 *
 * FFMQ is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * FFMQ 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.
 * 
 * You should have received a copy of the GNU Lesser General Public License
 * along with FFMQ; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
package net.timewalker.ffmq4.utils;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;

/**
 * StringTools
 */
public class StringTools
{
    /**
     * Test if the given text is null or an empty string
     */
    public static boolean isEmpty( String text )
    {
        return text == null || text.length() == 0;
    }
    
    /**
     * Test if the given text is not null and not an empty string
     */
    public static boolean isNotEmpty( String text )
    {
        return text != null && text.length() > 0;
    }
    
    /**
     * Right pad the given string
     */
    public static String rightPad( String value , int size , char padChar )
    {
        if (value.length() >= size)
            return value;
        
        StringBuilder result = new StringBuilder(size);
        result.append(value);
        for (int n = 0 ; n < size-value.length() ; n++)
            result.append(padChar);        
        return result.toString();
    }
    
    /**
     * Case-aware version of startsWith() 
     */
    public static boolean startsWith( String text , String prefix , int offset , boolean ignoreCase )
    {
        if (ignoreCase)
            return startsWithIgnoreCase(text,prefix,offset);
        else
            return text.startsWith(prefix,offset);
    }
    
    /**
     * Case-insensitive version of startsWith() 
     */
    public static boolean startsWithIgnoreCase( String text , String prefix , int offset )
    {
        int textLen = text.length();
        int prefixLen = prefix.length();
        
        if (offset < 0 || (offset > textLen - prefixLen))
            return false;
        
        for(int n=0;n= textLen) return needleLen == 0 ? textLen : -1;
        int i = fromIndex;
        if (i < 0)
        	i = 0;
        if (needleLen == 0) return i;
        
        char first = Character.toUpperCase(needle.charAt(0));
        int max = textLen - needleLen;
        
        startSearchForFirstChar:
        while (true)
        {
            // Look for first character.
            while (i <= max)
            {
                char c = Character.toUpperCase(text.charAt(i));
                if (c != first)
                    i++;
                else
                    break;
            }
            if (i > max) return -1;
            
            // Found first character, now look at the rest of the string
            int j = i + 1;
            int end = j + needleLen - 1;
            int k = 1;
            while (j < end) 
            {
                char c1 = Character.toUpperCase(text.charAt(j++));
                char c2 = Character.toUpperCase(needle.charAt(k++));
                if (c1 != c2) 
                {
                    i++;
                    // Look for str's first char again.
                    continue startSearchForFirstChar;
                }
             }
            
            return i;
        }
    }
    
    /**
     * Check if the given text matches a pattern
     */
    public static boolean matches( String text , String pattern )
    {
        return matches(text,pattern,false);
    }
    
    /**
     * Check if the given text matches a pattern
     */
    public static boolean matchesIgnoreCase( String text , String pattern )
    {
        return matches(text,pattern,true);
    }
        
    /**
     * Check if the given text matches a pattern
     */
    protected static boolean matches( String text , String pattern , boolean ignoreCase )
    {
        if (text == null)
            return false;
        if (pattern.length() == 0)
            return text.length() == 0;
        
        int textPos = 0;
        boolean startWithAny = false;
        StringTokenizer st = new StringTokenizer(pattern,"*?",true);
        while (st.hasMoreTokens())
        {
            String subPattern = st.nextToken();
            
            if (subPattern.equals("*"))
            {
                startWithAny = true;
            }
            else
            if (subPattern.equals("?"))
            {
                if (textPos < text.length())
                    textPos++;
                else
                    return false;
            }
            else
            {
                if (startWithAny)
                {
                    textPos = indexOf(text,subPattern,textPos,ignoreCase);
                    if (textPos == -1) return false;
                    startWithAny = false;
                }
                else
                {
                    if (!startsWith(text,subPattern,textPos,ignoreCase))
                        return false;
                }
                textPos += subPattern.length();
            }
        }
        
        // Remaining text
        if (textPos < text.length())
            if (!startWithAny)
                return false;
        
        return true;
    }
    
    /**
     * Capitalize the given string (null safe)
     * @param text String to capitalize
     * @return the capitalized string
     */
    public static String capitalize( String text )
    {
        if (text == null || text.length() == 0)
            return text;
        
        if (Character.isLowerCase(text.charAt(0)))
            return Character.toUpperCase(text.charAt(0)) + text.substring(1);
        else
            return text;
    }
    
    public static String join( Collection objects , String separator )
    {
    	StringBuilder sb = new StringBuilder();
        
        int count = 0;
        Iterator allObjects = objects.iterator();
        while (allObjects.hasNext())
        {
            Object object = allObjects.next();
            if (count++ > 0)
                sb.append(separator);
            sb.append(String.valueOf(object));
        }
        
        return sb.toString();
    }
    
    public static String join( Object[] objects , String separator )
    {
    	StringBuilder sb = new StringBuilder();
        for (int n = 0 ; n < objects.length ; n++)
        {
            if (n > 0)
                sb.append(separator);
            sb.append(String.valueOf(objects[n]));
        }
        
        return sb.toString();
    }
    
    public static String[] split(String str, char separatorChar)
    {
        if (str == null)
            return null;

        int len = str.length();
        if (len == 0)
            return new String[0];

        List list = new ArrayList<>();
        int i = 0, start = 0;
        boolean match = false;
        while (i < len)
        {
            if (str.charAt(i) == separatorChar)
            {
                if (match)
                {
                    list.add(str.substring(start, i));
                    match = false;
                }
                start = ++i;
                continue;
            }
            match = true;
            i++;
        }
        if (match)
            list.add(str.substring(start, i));

        return list.toArray(new String[list.size()]);
    }
    
    /**
	 * Format the given size
	 */
	public static String formatSize( long size )
	{
		if (size == 0)
			return "0";
		
		StringBuilder sb = new StringBuilder();
		if (size < 0)
		{
			size = -size;
			sb.append("-");
		}
	
		long gigs = size / (1024*1024*1024);
		if (gigs > 0)
		{
			sb.append(new DecimalFormat("######.###").format((double)size/(1024*1024*1024)));
			sb.append(" GB");
			return sb.toString();
		}
		
		long megs = size / (1024*1024);
		if (megs > 0)
		{
			sb.append(new DecimalFormat("###.#").format((double)size/(1024*1024)));
			sb.append(" MB");
			return sb.toString();
		}
		
		long kbs = size / (1024);
		if (kbs > 0)
		{
			sb.append(new DecimalFormat("###.#").format((double)size/(1024)));
			sb.append(" KB");
			return sb.toString();
		}
		
		sb.append(size);
		sb.append(" B");
		
		return sb.toString();
	}
	
	private static final char[] HEX_CHARS = {'0', '1', '2', '3',
        '4', '5', '6', '7',
        '8', '9', 'a', 'b',
        'c', 'd', 'e', 'f',};

	public static String asHex(byte[] data)
	{
		if (data == null || data.length == 0)
			return "";
		
		char buf[] = new char[data.length * 2];
		for (int i = 0, x = 0; i < data.length; i++)
		{
			buf[x++] = HEX_CHARS[(data[i] >>> 4) & 0xf];
			buf[x++] = HEX_CHARS[data[i] & 0xf];
		}
		return new String(buf);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy