Data Type Java

/**
 * com.sony.csl.j2me.util
 *  
 * Description:
 *   Utilities for J2ME CLDC/MIDP applications
 *   
 *   Released under OSS terms (see below) as part of LocationAPITools library:
 *     - http://code.google.com/p/locationapitools
 *   
 *   This code was developed within the scope of the NoiseTube project at
 *   Sony Computer Science Laboratory (CSL) Paris, for more information please refer to: 
 *     - http://noisetube.net
 *     - http://code.google.com/p/noisetube
 *     - http://www.csl.sony.fr
 * 
 * Author:
 *   Matthias Stevens (Sony CSL Paris / Vrije Universiteit Brussel)
 *   Contact: matthias.stevens@gmail.com
 *   
 * License: 
 *   Copyright 2008-2009 Sony CSL Paris
 * 
 *   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.
 */
//package com.sony.csl.j2me.util;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.Vector;
/**
 * A class with useful string operations
 * 
 * @author mstevens
 *
 */
public class StringUtils
{
  
  static public int countOccurences(String toSearch, char toFind)
  {
    int count = 0;
    for(int i = 0; i < toSearch.length(); i++)
      if(toSearch.charAt(i) == toFind)
        count++;
    return count;
  }
  
  static public String addTabsFront(String string, int tabs)
  {
    StringBuffer bff = new StringBuffer();
    for(int t = 0; t < tabs; t++)
      bff.append("\t");
    bff.append(string);
    return bff.toString();    
  }
  
  static public int lastIndexOf(String toSearch, String toFind)
  {
    if(toSearch == null || toFind == null)
      throw new NullPointerException();
    //the dirty way:
    String toSearchReversed = (new StringBuffer(toSearch)).reverse().toString();
    String toFindReversed = (new StringBuffer(toFind)).reverse().toString();
    return toSearch.length() - (toSearchReversed.indexOf(toFindReversed) + toFind.length() - 1) - 1;    
  }
  
  static public String replace(String toSearch, String toFind, String replaceWith) throws IllegalArgumentException
  {
    toSearch = new String(toSearch); //make copy
    if(toSearch != null && toFind != null && replaceWith != null)
    {
      int idx = toSearch.indexOf(toFind);
      while(idx > -1)
      {
        String rest = right(toSearch, toSearch.length() - (idx + toFind.length()));
        toSearch = left(toSearch, idx) + replaceWith + rest; 
        int idxInRest = rest.indexOf(toFind);
        idx = ((idxInRest > -1) ? (idxInRest + idx + replaceWith.length()) : -1);
      }
    }  
    return toSearch;
  }
  
  static public String replaceWithEscape(String toSearch, char toFind, String replaceWith, char escape) throws IllegalArgumentException
  {
    toSearch = new String(toSearch); //make copy
    if(toSearch != null)
    {
      int idx = toSearch.indexOf(toFind);
      while(idx > -1)
      {
        String rest = right(toSearch, toSearch.length() - (idx + 1));
        int shift = 0;
        if(idx > 0 && toSearch.charAt(idx - 1) == escape)
          toSearch = left(toSearch, idx - 1) + toFind + rest; //escape: "!$" = "$"
        else
        {
          toSearch = left(toSearch, idx) + replaceWith + rest;
          shift = replaceWith.length();
        }
        int idxInRest = rest.indexOf(toFind);
        idx = ((idxInRest > -1) ? (idxInRest + idx + shift) : -1);
      }
    }  
    return toSearch;
  }
  
  static public String replaceWithEscape(String toSearch, char toFind, String[] replaceWith, char escape) throws IllegalArgumentException
  {
    toSearch = new String(toSearch); //make copy
    if(toSearch != null && replaceWith != null)
    {
      int idx = toSearch.indexOf(toFind);
      int r = 0;
      while(idx > -1 && replaceWith.length > r && replaceWith[r] != null)
      {
        String rest = right(toSearch, toSearch.length() - (idx + 1));
        int shift = 0;
        if(idx > 0 && toSearch.charAt(idx - 1) == escape)
          toSearch = left(toSearch, idx - 1) + toFind + rest; //escape: "!$" = "$"
        else
        {
          toSearch = left(toSearch, idx) + replaceWith[r] + rest;
          shift = replaceWith[r].length();
          r++;
        }
        int idxInRest = rest.indexOf(toFind);        
        idx = ((idxInRest > -1) ? (idxInRest + idx + shift) : -1);
      }
    }  
    return toSearch;
  }
  
  static public String replace(String toSearch, char toFind, String replaceWith)
  {
    return replace(toSearch, new String(new char[] { toFind }), replaceWith);
  }
  
  static public String replace(String toSearch, String toFind, char replaceWith)
  {
    return replace(toSearch, toFind, new String(new char[] { replaceWith }));
  }
  
  static public String left(String string, int substringLength)
  {
    if(substringLength < 0)
      throw new IllegalArgumentException("Substring length cannot be negative!");
    return string.substring(0, substringLength);    
  }
  
  static public String right(String string, int substringLength)
  {
    if(substringLength < 0)
      throw new IllegalArgumentException("Substring length cannot be negative!");
    return string.substring(string.length() - substringLength, string.length());      
  }
  
  static public String padWithLeadingZeros(String string, int desiredLength)
  {
    StringBuffer bff = new StringBuffer(string);
    while(bff.length() < desiredLength)      
      bff.insert(0, '0');
    return bff.toString();
  }
  
  static public String cutOrExtendAtTail(String string, int desiredLength, char filler)
  {
    if(string.length() > desiredLength)
      return left(string, desiredLength);
    else if(string.length() < desiredLength)
    {
      StringBuffer bff = new StringBuffer(string);
      for(int i = 0; i < desiredLength - string.length(); i++)
        bff.append(filler);
      return bff.toString();  
    }
    else
      return string;
  }
  
  static public String removeWhiteSpace(String string)
  {
    string = replace(string, '\n', "");
    string = replace(string, '\r', "");
    string = replace(string, '\t', "");
    string = replace(string, ' ', "");
    return string;
  }
  
  static public String contractToCamelCase(String string)
  {
    StringBuffer bff = new StringBuffer(string.length());
    boolean previousWasSpace = false;
    for(int i = 0; i < string.length(); i++)
    {
      char currentChar = string.charAt(i); 
      if(currentChar == ' ')
      {
        previousWasSpace = true;
      }
      else
      {
        if(previousWasSpace)
          bff.append(Character.toUpperCase(currentChar));
        else
          bff.append(currentChar);        
        previousWasSpace = false;
      }
    }
    return bff.toString();
  }
  
  static public String removeWhiteSpaceAndContractToCamelCase(String string)
  {
    string = replace(string, '\n', "");
    string = replace(string, '\r', "");
    string = replace(string, '\t', "");
    return contractToCamelCase(string);
  }
  
  public static String[] split(String string, char separatorChar)
  {
    return split(string, new char[] { separatorChar });
  }
  
  public static String[] split(String string, char[] separatorChars)
  {
    if (string == null || string.equals(""))
      return new String[] { string };
    int len = string.length();
    Vector separators = new Vector(separatorChars.length);
    for(int s = 0; s < separatorChars.length; s++)
      separators.addElement(new Character(separatorChars[s]));
    Vector list = new Vector();
    int i = 0;
    int start = 0;
    boolean match = false;
    while (i < len)
    {
      if (separators.contains(new Character(string.charAt(i))))
      {
        if (match)
        {
          list.addElement(string.substring(start, i));
          match = false;
        }
        start = ++i;
        continue;
      }
      match = true;
      i++;
    }
    if (match)
    {
      list.addElement(string.substring(start, i));
    }
    String[] arr = new String[list.size()];
    list.copyInto(arr);
    return arr;
  }
  
  /**
   * Converts a long timestamp to a string in the following format:

   *  YYYY[dateSeparator]MM[dateSeparator]DD[dateTimeSeparator]hh[timeSeparator]mm[timeSeparator]ss
   *
   * @param timeStamp
   * @param dateSeparator
   * @param timeSeparator
   * @param dateTimeSeparator
   * @return A String containing the formatted timestamp
   */
  static public String formatDateTime(long timeStamp, String dateSeparator, String timeSeparator, String dateTimeSeparator)
  {  
    if(dateSeparator == null)
      dateSeparator = "";
    if(dateTimeSeparator == null)
      dateTimeSeparator = "";
    Calendar cal = Calendar.getInstance();
    cal.setTimeZone(TimeZone.getDefault()); //use system time zone
    cal.setTime(new Date(timeStamp)); //set the time    
    //Format the string:
    StringBuffer bff = new StringBuffer();
    //  Date (YYYY[dateSeparator]MM[dateSeparator]DD)
    bff.append(StringUtils.padWithLeadingZeros(String.valueOf(cal.get(Calendar.YEAR)), 4) + dateSeparator);
    bff.append(StringUtils.padWithLeadingZeros(String.valueOf(cal.get(Calendar.MONTH) + 1), 2) + dateSeparator);
    bff.append(StringUtils.padWithLeadingZeros(String.valueOf(cal.get(Calendar.DAY_OF_MONTH)), 2));
    //  [dateTimeSeparator]
    bff.append(dateTimeSeparator);
    //  Time (hh[timeSeparator]mm[timeSeparator]ss)
    bff.append(formatTime(timeStamp, timeSeparator));
    //return the result
    return bff.toString();    
  }
  
  /**
   * Converts a long timestamp to a string in the following format:

   *  hh[timeSeparator]mm[timeSeparator]ss
   *
   * @param timeStamp
   * @param timeSeparator
   * @return A String containing the formatted timestamp
   */
  static public String formatTime(long timeStamp, String timeSeparator)
  {  
    if(timeSeparator == null)
      timeSeparator = "";
    Calendar cal = Calendar.getInstance();
    cal.setTimeZone(TimeZone.getDefault()); //use system time zone
    cal.setTime(new Date(timeStamp)); //set the time    
    //Format the string:
    StringBuffer bff = new StringBuffer();
    //  Time (hh[timeSeparator]mm[timeSeparator]ss)
    bff.append(StringUtils.padWithLeadingZeros(String.valueOf(cal.get(Calendar.HOUR_OF_DAY)), 2) + timeSeparator);
    bff.append(StringUtils.padWithLeadingZeros(String.valueOf(cal.get(Calendar.MINUTE)), 2) + timeSeparator);
    bff.append(StringUtils.padWithLeadingZeros(String.valueOf(cal.get(Calendar.SECOND)), 2));
    //return the result
    return bff.toString();    
  }
  
  public static String formatTimeSpan(long milliseconds)
  {  
    //Days
    long days = milliseconds / 86400000;
    //Hours
    long hours = (milliseconds % 86400000) / 3600000;
    //Minutes
    long minutes = ((milliseconds % 86400000) % 3600000) / 60000;    
    //Seconds.millis
    float seconds = (((milliseconds % 86400000) % 3600000) % 60000) / 1000;
    return
      "" +
      ((days > 0) ? (days + "d ") : "") +
      ((hours > 0) ? (hours + "h ") : "") +
      ((minutes > 0) ? (minutes + "m ") : "")
      + seconds + "s";
  }
  
  public static String StringArrayToString(String[] array, String separator)
  {
    if(array != null && array.length > 0)
    {
      StringBuffer bff = new StringBuffer(array[0]);
      for(int i = 1; i < array.length; i++)
        bff.append(separator + array[i]);
      return bff.toString();
    }
    else
      return "";
  }
  
}