find Distinct Indexes Of - Java java.lang

Java examples for java.lang:String Distance

Description

find Distinct Indexes Of

Demo Code

/*// w  w w .  ja v  a  2s  .c o m
 * Copyright 2013 Guidewire Software, Inc.
 */
/**
 * This class is based, in part, on org.apache.commons.lang.StringUtils and is intended
 * to break the dependency on that project.
 *
 * @author <a href="http://jakarta.apache.org/turbine/">Apache Jakarta Turbine</a>
 * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
 * @author Daniel L. Rall
 * @author <a href="mailto:gcoladonato@yahoo.com">Greg Coladonato</a>
 * @author <a href="mailto:ed@apache.org">Ed Korthof</a>
 * @author <a href="mailto:rand_mcneely@yahoo.com">Rand McNeely</a>
 * @author Stephen Colebourne
 * @author <a href="mailto:fredrik@westermarck.com">Fredrik Westermarck</a>
 * @author Holger Krauth
 * @author <a href="mailto:alex@purpletech.com">Alexander Day Chaffee</a>
 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
 * @author Arun Mammen Thomas
 * @author Gary Gregory
 * @author Phil Steitz
 * @author Al Chou
 * @author Michael Davey
 * @author Reuben Sivan
 * @author Chris Hyzer
 *  Johnson

 */
import java.util.ArrayList;

public class Main {
  public static void main(String[] argv) {
    String string = "java2s.com";
    String substringToLookFor = "java2s.com";
    System.out.println(findDistinctIndexesOf(string, substringToLookFor));
  }

  public static ArrayList<Integer> findDistinctIndexesOf(String string, String substringToLookFor) {
    ArrayList<Integer> positions = new ArrayList<Integer>();

    if (isEmpty(substringToLookFor)) {
      return positions;
    }

    int i = 0;
    i = indexOf(string, substringToLookFor, i);
    while (i != -1) {
      positions.add(i);
      i += substringToLookFor.length();
      i = indexOf(string, substringToLookFor, i);
    }
    return positions;
  }

  /**
   * <p>
   * Checks if a String is empty ("") or null.
   * </p>
   *
   * <pre>
   * StringUtils.isEmpty(null)      = true
   * StringUtils.isEmpty("")        = true
   * StringUtils.isEmpty(" ")       = false
   * StringUtils.isEmpty("bob")     = false
   * StringUtils.isEmpty("  bob  ") = false
   * </pre>
   *
   * <p>
   * NOTE: This method changed in Lang version 2.0. It no longer trims the String.
   * That functionality is available in isBlank().
   * </p>
   *
   * @param str
   *          the String to check, may be null
   * @return <code>true</code> if the String is empty or null
   */
  public static boolean isEmpty(String str) {
    return str == null || str.length() == 0;
  }

  /**
   * <p>
   * Finds the first index within a String, handling <code>null</code>. This
   * method uses {@link String#indexOf(int)}.
   * </p>
   *
   * <p>
   * A <code>null</code> or empty ("") String will return <code>-1</code>.
   * </p>
   *
   * <pre>
   * indexOf(null, *)         = -1
   * indexOf("", *)           = -1
   * indexOf("aabaabaa", 'a') = 0
   * indexOf("aabaabaa", 'b') = 2
   * </pre>
   *
   * @param str
   *          the String to check, may be null
   * @param searchChar
   *          the character to find
   * @return the first index of the search character, -1 if no match or
   *         <code>null</code> string input
   * @since 2.0
   */
  public static int indexOf(String str, char searchChar) {
    if (isEmpty(str)) {
      return -1;
    }
    return str.indexOf(searchChar);
  }

  /**
   * <p>
   * Finds the first index within a String from a start position, handling
   * <code>null</code>. This method uses {@link String#indexOf(int, int)}.
   * </p>
   *
   * <p>
   * A <code>null</code> or empty ("") String will return <code>-1</code>. A
   * negative start position is treated as zero. A start position greater than the
   * string length returns <code>-1</code>.
   * </p>
   *
   * <pre>
   * indexOf(null, *, *)          = -1
   * indexOf("", *, *)            = -1
   * indexOf("aabaabaa", 'b', 0)  = 2
   * indexOf("aabaabaa", 'b', 3)  = 5
   * indexOf("aabaabaa", 'b', 9)  = -1
   * indexOf("aabaabaa", 'b', -1) = 2
   * </pre>
   *
   * @param str
   *          the String to check, may be null
   * @param searchChar
   *          the character to find
   * @param startPos
   *          the start position, negative treated as zero
   * @return the first index of the search character, -1 if no match or
   *         <code>null</code> string input
   * @since 2.0
   */
  public static int indexOf(String str, char searchChar, int startPos) {
    if (isEmpty(str)) {
      return -1;
    }
    return str.indexOf(searchChar, startPos);
  }

  /**
   * <p>
   * Finds the first index within a String, handling <code>null</code>. This
   * method uses {@link String#indexOf(String)}.
   * </p>
   *
   * <p>
   * A <code>null</code> String will return <code>-1</code>.
   * </p>
   *
   * <pre>
   * indexOf(null, *)          = -1
   * indexOf(*, null)          = -1
   * indexOf("", "")           = 0
   * indexOf("aabaabaa", "a")  = 0
   * indexOf("aabaabaa", "b")  = 2
   * indexOf("aabaabaa", "ab") = 1
   * indexOf("aabaabaa", "")   = 0
   * </pre>
   *
   * @param str
   *          the String to check, may be null
   * @param searchStr
   *          the String to find, may be null
   * @return the first index of the search String, -1 if no match or
   *         <code>null</code> string input
   * @since 2.0
   */
  public static int indexOf(String str, String searchStr) {
    if (str == null || searchStr == null) {
      return -1;
    }
    return str.indexOf(searchStr);
  }

  /**
   * <p>
   * Finds the first index within a String, handling <code>null</code>. This
   * method uses {@link String#indexOf(String, int)}.
   * </p>
   *
   * <p>
   * A <code>null</code> String will return <code>-1</code>. A negative start
   * position is treated as zero. An empty ("") search String always matches. A
   * start position greater than the string length only matches an empty search
   * String.
   * </p>
   *
   * <pre>
   * indexOf(null, *, *)          = -1
   * indexOf(*, null, *)          = -1
   * indexOf("", "", 0)           = 0
   * indexOf("aabaabaa", "a", 0)  = 0
   * indexOf("aabaabaa", "b", 0)  = 2
   * indexOf("aabaabaa", "ab", 0) = 1
   * indexOf("aabaabaa", "b", 3)  = 5
   * indexOf("aabaabaa", "b", 9)  = -1
   * indexOf("aabaabaa", "b", -1) = 2
   * indexOf("aabaabaa", "", 2)   = 2
   * indexOf("abc", "", 9)        = 3
   * </pre>
   *
   * @param str
   *          the String to check, may be null
   * @param searchStr
   *          the String to find, may be null
   * @param startPos
   *          the start position, negative treated as zero
   * @return the first index of the search String, -1 if no match or
   *         <code>null</code> string input
   * @since 2.0
   */
  public static int indexOf(String str, String searchStr, int startPos) {
    if (str == null || searchStr == null) {
      return -1;
    }
    // JDK1.2/JDK1.3 have a bug, when startPos > str.length for "", hence
    if (searchStr.length() == 0 && startPos >= str.length()) {
      return str.length();
    }
    return str.indexOf(searchStr, startPos);
  }

  /**
   * Gets a String's length or <code>0</code> if the String is <code>null</code>.
   *
   * @param str
   *          a String or <code>null</code>
   * @return String length or <code>0</code> if the String is <code>null</code>.
   * @since 2.4
   */
  public static int length(String str) {
    return str == null ? 0 : str.length();
  }
}

Related Tutorials