Пример #1
0
  /**
   * Inserts a given string into another padding it with spaces. Is aware if the insertion point has
   * a space on either end and does not add extra spaces. If the string-to-insert is already present
   * (and not part of another word) we return the original string unchanged.
   *
   * @param s the string to insert into
   * @param insertAt the position to insert the string
   * @param stringToInsert the string to insert
   * @return the result of inserting the stringToInsert into the passed in string
   * @throws IndexOutOfBoundsException if the insertAt is negative, or insertAt is larger than the
   *     length of s String object
   */
  public static String insertPaddedIfNeeded(String s, int insertAt, String stringToInsert) {
    if (Strings.isEmptyOrNull(stringToInsert)) {
      return s;
    }

    boolean found = false;
    int startPos = 0;

    while ((startPos < s.length()) && (!found)) {
      int pos = s.indexOf(stringToInsert, startPos);

      if (pos < 0) break;

      startPos = pos + 1;
      int before = pos - 1;
      int after = pos + stringToInsert.length();

      if (((pos == 0) || (Character.isWhitespace(s.charAt(before))))
          && ((after >= s.length()) || (Character.isWhitespace(s.charAt(after))))) found = true;
    }

    if (found) {
      StringBuilder newText = new StringBuilder(s);

      if (newText.lastIndexOf(SINGLE_SPACE) != newText.length() - 1) {
        newText.append(SINGLE_SPACE);
      }

      return (newText.toString());
    } else return (Strings.insertPadded(s, insertAt, stringToInsert));
  }
Пример #2
0
  /**
   * Inserts a given string into another padding it with spaces. Is aware if the insertion point has
   * a space on either end and does not add extra spaces.
   *
   * @param s the string to insert into
   * @param insertAt the position to insert the string
   * @param stringToInsert the string to insert
   * @return the result of inserting the stringToInsert into the passed in string
   * @throws IndexOutOfBoundsException if the insertAt is negative, or insertAt is larger than the
   *     length of s String object
   */
  public static String insertPadded(String s, int insertAt, String stringToInsert) {
    if (Strings.isEmptyOrNull(stringToInsert)) {
      return s;
    }

    if (insertAt < 0) {
      throw new IndexOutOfBoundsException(
          "Invalid insertAt of [" + insertAt + "] for string [" + s + "]");
    }

    StringBuilder newText = new StringBuilder();
    if (insertAt > 0) {
      newText.append(s.substring(0, insertAt));
      if (newText.lastIndexOf(SINGLE_SPACE) != newText.length() - 1) {
        newText.append(SINGLE_SPACE);
      }
      newText.append(stringToInsert);
      String postItem = s.substring(insertAt);
      if (postItem.indexOf(SINGLE_SPACE) != 0) {
        newText.append(SINGLE_SPACE);
      }
      newText.append(postItem);
    } else {
      newText.append(stringToInsert);
      if (s.indexOf(SINGLE_SPACE) != 0) {
        newText.append(SINGLE_SPACE);
      }
      newText.append(s);
    }
    return newText.toString();
  }