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

org.joinedworkz.common.helper.StringHelper Maven / Gradle / Ivy

There is a newer version: 1.3.51
Show newest version
package org.joinedworkz.common.helper;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import javax.inject.Singleton;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;

@Singleton
@SuppressWarnings("all")
public class StringHelper {
  public static final char NL = '\n';

  public static final char CR = '\r';

  public static final char BRACKET_OPEN = '(';

  public static final char BRACKET_CLOSE = ')';

  public boolean isNewLineChar(final char c) {
    return ((c == StringHelper.NL) || (c == StringHelper.CR));
  }

  public boolean beginsLineChar(final StringBuilder buffer) {
    return ((buffer.length() == 0) || this.isNewLineChar(buffer.charAt((buffer.length() - 1))));
  }

  /**
   * Replaces the occurrence of {@code begin} in a string with {@code replacement}.
   * In case the string {@code str is null or empty} the original value is returned
   */
  public String replaceBegin(final String str, final String begin, final String replacement) {
    if (((str != null) && (begin != null))) {
      final int beginLength = begin.length();
      if (((beginLength <= str.length()) && str.startsWith(begin))) {
        if (((replacement != null) && (replacement.length() > 0))) {
          final StringBuilder buffer = new StringBuilder();
          buffer.append(replacement);
          buffer.append(str.substring(beginLength));
          return buffer.toString();
        } else {
          return begin.substring(beginLength);
        }
      }
    }
    return null;
  }

  public String trimLastLineBreak(final String str) {
    if ((str != null)) {
      int totalCount = 0;
      int crCount = 0;
      int nlCount = 0;
      for (int i = (str.length() - 1); (i >= 0); i--) {
        {
          totalCount++;
          final char c = str.charAt(i);
          if ((c == StringHelper.CR)) {
            crCount++;
          }
          if ((c == StringHelper.NL)) {
            nlCount++;
          }
          if ((totalCount > (crCount + nlCount))) {
            if ((totalCount == 1)) {
              return str;
            } else {
              int _length = str.length();
              int _minus = (_length - totalCount);
              int _plus = (_minus + 1);
              return str.substring(0, _plus);
            }
          }
        }
      }
    }
    return null;
  }

  public String textInLineAfterMarker(final String string, final String markerString) {
    if ((string != null)) {
      final int markerIndex = string.indexOf(markerString);
      if ((markerIndex >= 0)) {
        int _length = markerString.length();
        int _plus = (_length + 1);
        return this.contentOfLineAfter(string, _plus);
      }
    }
    return null;
  }

  public String contentOfLineBefore(final String str, final int index) {
    for (int i = index; (i >= 0); i--) {
      {
        final char c = str.charAt(i);
        if (((c == StringHelper.CR) || (c == StringHelper.NL))) {
          return str.substring((i + 1), index);
        }
      }
    }
    return str;
  }

  public String contentOfLineAfter(final String str, final int index) {
    final int strLength = str.length();
    for (int i = index; (i < strLength); i++) {
      {
        final char c = str.charAt(i);
        if (((c == StringHelper.CR) || (c == StringHelper.NL))) {
          return str.substring(index, i);
        }
      }
    }
    return str.substring(index);
  }

  public int indexOfLineBreakAfter(final String str, final int index) {
    final int strLength = str.length();
    for (int i = index; (i < strLength); i++) {
      {
        final char c = str.charAt(i);
        if (((c == StringHelper.CR) || (c == StringHelper.NL))) {
          return i;
        }
      }
    }
    return (-1);
  }

  public boolean containsLineBreak(final String str) {
    if ((str != null)) {
      return ((str.indexOf(StringHelper.CR) >= 0) || (str.indexOf(StringHelper.NL) >= 0));
    } else {
      return false;
    }
  }

  public void insertLinesOfString(final StringBuilder buffer, final String str, final String indention) {
    this.insertLinesOfString(buffer, str, indention, true);
  }

  public void insertLinesOfString(final StringBuilder buffer, final String str, final String indention, final boolean ignoreBlankString) {
    if (ignoreBlankString) {
      int _length = str.trim().length();
      final boolean hasContent = (_length > 0);
      if ((!hasContent)) {
        return;
      }
    }
    final String[] lines = str.split("\\r?\\n");
    int _length_1 = str.length();
    int _minus = (_length_1 - 1);
    final char lastChar = str.charAt(_minus);
    int _length_2 = indention.length();
    final boolean hasIndention = (_length_2 > 0);
    final int lineCount = lines.length;
    final int lastLine = (lineCount - 1);
    for (int i = 0; (i < lineCount); i++) {
      {
        final String line = lines[i];
        if ((hasIndention && this.beginsLineChar(buffer))) {
          buffer.append(indention);
        }
        buffer.append(line);
        if (((i < lastLine) || this.isNewLineChar(lastChar))) {
          this.addLineBreak(buffer);
        }
      }
    }
    if ((((!ignoreBlankString) && (lineCount == 0)) && (str.contains("\r") || str.contains("\n")))) {
      buffer.append(str);
    }
  }

  public String toMultilineString(final String str, final String intialIndention, final String indention, final boolean ignoreBlankString) {
    final StringBuilder buffer = new StringBuilder();
    if (ignoreBlankString) {
      int _length = str.trim().length();
      final boolean hasContent = (_length > 0);
      if ((!hasContent)) {
        return "\"\"";
      }
    }
    final String[] lines = str.split("\\r?\\n");
    int _length_1 = str.length();
    int _minus = (_length_1 - 1);
    final char lastChar = str.charAt(_minus);
    int _length_2 = indention.length();
    final boolean hasIndention = (_length_2 > 0);
    final int lineCount = lines.length;
    final int lastLine = (lineCount - 1);
    for (int i = 0; (i < lineCount); i++) {
      {
        final String line = lines[i];
        if ((hasIndention && this.beginsLineChar(buffer))) {
          if ((i == 0)) {
            buffer.append(intialIndention);
          } else {
            buffer.append(indention);
          }
        }
        if ((i == 0)) {
          buffer.append("\"");
        } else {
          buffer.append("+ \"");
        }
        buffer.append(line);
        buffer.append("\"");
        if (((i < lastLine) || this.isNewLineChar(lastChar))) {
          this.addLineBreak(buffer);
        }
      }
    }
    if ((((!ignoreBlankString) && (lineCount == 0)) && (str.contains("\r") || str.contains("\n")))) {
      buffer.append(str);
    }
    return buffer.toString();
  }

  public StringBuilder addLineBreak(final StringBuilder buffer) {
    return buffer.append("\r\n");
  }

  public int indexOfKeywordOnSameLevel(final int startIndex, final String sql, final String keyword) {
    int _length = sql.length();
    int _minus = (_length - 1);
    boolean _equals = (startIndex == _minus);
    if (_equals) {
      return (-1);
    }
    final String[] parts = sql.substring(startIndex).split(keyword);
    int _length_1 = parts.length;
    boolean _equals_1 = (_length_1 == 1);
    if (_equals_1) {
      return (-1);
    }
    int index = startIndex;
    int subLevel = 0;
    for (final String part : parts) {
      {
        final int partLength = part.length();
        for (int i = 0; (i < partLength); i++) {
          {
            final char c = part.charAt(i);
            boolean _equals_2 = Objects.equals(Character.valueOf(c), "(");
            if (_equals_2) {
              subLevel++;
            } else {
              boolean _equals_3 = Objects.equals(Character.valueOf(c), ")");
              if (_equals_3) {
                subLevel--;
              }
            }
          }
        }
        int _index = index;
        index = (_index + partLength);
        if ((subLevel == 0)) {
          return index;
        } else {
          int _index_1 = index;
          index = (_index_1 + 4);
        }
      }
    }
    return (-1);
  }

  public List splitByCharacterOnSameLevel(final String sql, final char splitBy) {
    if ((sql == null)) {
      return Collections.emptyList();
    }
    int _indexOf = sql.indexOf(splitBy);
    boolean _tripleEquals = (_indexOf == (-1));
    if (_tripleEquals) {
      return List.of(sql);
    }
    final ArrayList parts = CollectionLiterals.newArrayList();
    int begin = 0;
    int subLevel = 0;
    int index = 0;
    final int length = sql.length();
    for (; (index < length); index++) {
      {
        final char c = sql.charAt(index);
        if ((c == StringHelper.BRACKET_OPEN)) {
          subLevel++;
        } else {
          if ((c == StringHelper.BRACKET_CLOSE)) {
            subLevel--;
          }
        }
        if (((subLevel == 0) && (c == splitBy))) {
          final String part = sql.substring(begin, index);
          parts.add(part);
          begin = (index + 1);
        }
      }
    }
    final String lastPart = sql.substring(begin, index);
    parts.add(lastPart);
    return parts;
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy