Class StringConcatenation

  • All Implemented Interfaces:
    java.lang.CharSequence

    @GwtCompatible
    public class StringConcatenation
    extends java.lang.Object
    implements java.lang.CharSequence

    A StringConcatenation allows for efficient, indentation aware concatenation of character sequences.

    In addition to the methods that are specified by the implemented interface CharSequence, there are some other public operations that allow to modify the contents of this sequence. The string representation of arbitrary objects can be appended to an instance of StringConcatenation. There are overloaded variants of append(Object, String) that allow to pass an indentation that should be applied to each line of the appended content. Each line break that is part of the new content will be replaced by the line delimiter that was configured for this StringConcatenation.

    The append-operation ignores null arguments. This is different to what StringBuffer or StringBuilder do and that's the reason why the Appendable interface is not fulfilled by a StringConcatenation.

    The object uses an internal List of Strings that is concatenated on demand to a complete sequence. Use toString() to get the joined version of a StringConcatenation.

    Object.equals(Object) and Object.hashCode() are not specialized for a StringConcatenation, that is, the semantics are based on identity similar to what StringBuffer and StringBuilder do.

    Since:
    2.3
    • Constructor Summary

      Constructors 
      Constructor Description
      StringConcatenation()
      Create a new concatenation that uses the system line delimiter.
      StringConcatenation​(java.lang.String lineDelimiter)
      Create a new concatenation with the specified delimiter.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void append​(java.lang.Object object)
      Append the string representation of the given object to this sequence.
      protected void append​(java.lang.Object object, int index)  
      void append​(java.lang.Object object, java.lang.String indentation)
      Add the string representation of the given object to this sequence.
      protected void append​(java.lang.Object object, java.lang.String indentation, int index)
      Add the string representation of the given object to this sequence at the given index.
      void append​(java.lang.String str)
      Append the given string to this sequence.
      void append​(java.lang.String str, java.lang.String indentation)
      Add the given string to this sequence.
      void append​(StringConcatenation concat)
      Append the contents of a given StringConcatenation to this sequence.
      void append​(StringConcatenationClient client)
      Append the contents of a given StringConcatenationClient to this sequence.
      void append​(StringConcatenationClient client, java.lang.String indentation)
      Append the contents of a given StringConcatenationClient to this sequence.
      void append​(StringConcatenation concat, java.lang.String indentation)
      Append the contents of a given StringConcatenation to this sequence.
      void appendImmediate​(java.lang.Object object, java.lang.String indentation)
      Add the string representation of the given object to this sequence immediately.
      protected void appendSegments​(int index, java.util.List<java.lang.String> otherSegments)
      Add the list of segments to this sequence at the given index.
      protected void appendSegments​(int index, java.util.List<java.lang.String> otherSegments, java.lang.String otherDelimiter)
      Add the list of segments to this sequence at the given index.
      protected void appendSegments​(java.lang.String indentation, int index, java.util.List<java.lang.String> otherSegments, java.lang.String otherDelimiter)
      Add the list of segments to this sequence at the given index.
      char charAt​(int index)
      protected java.util.List<java.lang.String> getContent()
      Return the actual content of this sequence, including all trailing whitespace.
      protected java.lang.String getLineDelimiter()
      Allows subtypes to access the configured line delimiter.
      protected java.util.List<java.lang.String> getSignificantContent()
      Compute the significant content of this sequence.
      protected java.lang.String getStringRepresentation​(java.lang.Object object)
      Computes the string representation of the given object.
      int length()
      void newLine()
      Add a newline to this sequence according to the configured lineDelimiter.
      void newLineIfNotEmpty()
      Add a newline to this sequence according to the configured lineDelimiter if the last line contains something besides whitespace.
      protected java.util.List<java.lang.String> splitLinesAndNewLines​(java.lang.String text)
      Return a list of segments where each segment is either the content of a line in the given text or a line-break according to the configured delimiter.
      java.lang.CharSequence subSequence​(int start, int end)
      java.lang.String toString()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.lang.CharSequence

        chars, codePoints
    • Field Detail

      • DEFAULT_LINE_DELIMITER

        public static final java.lang.String DEFAULT_LINE_DELIMITER
        The default line delimiter that is used by instances of StringConcatenation. It uses System.getProperty("line.separator").
        Since:
        2.3
    • Constructor Detail

      • StringConcatenation

        public StringConcatenation()
        Create a new concatenation that uses the system line delimiter.
        See Also:
        System.getProperties(), System.getProperty(String)
      • StringConcatenation

        public StringConcatenation​(java.lang.String lineDelimiter)
        Create a new concatenation with the specified delimiter.
        Parameters:
        lineDelimiter - the used delimiter.
        Throws:
        java.lang.IllegalArgumentException - if the lineDelimiter is null or the empty String.
        Since:
        2.3
    • Method Detail

      • append

        public void append​(java.lang.Object object)
        Append the string representation of the given object to this sequence. Does nothing if the object is null.
        Parameters:
        object - the to-be-appended object.
      • append

        public void append​(java.lang.String str)
        Append the given string to this sequence. Does nothing if the string is null.
        Parameters:
        str - the to-be-appended string.
        Since:
        2.11
      • append

        public void append​(StringConcatenation concat)
        Append the contents of a given StringConcatenation to this sequence. Does nothing if the concatenation is null.
        Parameters:
        concat - the to-be-appended StringConcatenation.
        Since:
        2.11
      • append

        public void append​(StringConcatenationClient client)
        Append the contents of a given StringConcatenationClient to this sequence. Does nothing if the argument is null.
        Parameters:
        client - the to-be-appended StringConcatenationClient.
        Since:
        2.11
      • append

        protected void append​(java.lang.Object object,
                              int index)
      • append

        public void append​(java.lang.Object object,
                           java.lang.String indentation)
        Add the string representation of the given object to this sequence. The given indentation will be prepended to each line except the first one if the object has a multi-line string representation.
        Parameters:
        object - the appended object.
        indentation - the indentation string that should be prepended. May not be null.
      • append

        public void append​(java.lang.String str,
                           java.lang.String indentation)
        Add the given string to this sequence. The given indentation will be prepended to each line except the first one if the object has a multi-line string representation.
        Parameters:
        str - the appended string.
        indentation - the indentation string that should be prepended. May not be null.
        Since:
        2.11
      • append

        public void append​(StringConcatenation concat,
                           java.lang.String indentation)
        Append the contents of a given StringConcatenation to this sequence. Does nothing if the concatenation is null. The given indentation will be prepended to each line except the first one.
        Parameters:
        concat - the to-be-appended StringConcatenation.
        indentation - the indentation string that should be prepended. May not be null.
        Since:
        2.11
      • append

        public void append​(StringConcatenationClient client,
                           java.lang.String indentation)
        Append the contents of a given StringConcatenationClient to this sequence. Does nothing if that argument is null. The given indentation will be prepended to each line except the first one.
        Parameters:
        client - the to-be-appended StringConcatenationClient.
        indentation - the indentation string that should be prepended. May not be null.
        Since:
        2.11
      • append

        protected void append​(java.lang.Object object,
                              java.lang.String indentation,
                              int index)
        Add the string representation of the given object to this sequence at the given index. The given indentation will be prepended to each line except the first one if the object has a multi-line string representation.
        Parameters:
        object - the to-be-appended object.
        indentation - the indentation string that should be prepended. May not be null.
        index - the index in the list of segments.
      • getStringRepresentation

        protected java.lang.String getStringRepresentation​(java.lang.Object object)
        Computes the string representation of the given object. The default implementation will just invoke Object.toString() but clients may override and specialize the logic.
        Parameters:
        object - the object that shall be appended. Never null.
        Returns:
        the string representation. May not be null.
        Since:
        2.5
      • appendImmediate

        public void appendImmediate​(java.lang.Object object,
                                    java.lang.String indentation)
        Add the string representation of the given object to this sequence immediately. That is, all the trailing whitespace of this sequence will be ignored and the string is appended directly after the last segment that contains something besides whitespace. The given indentation will be prepended to each line except the first one if the object has a multi-line string representation.
        Parameters:
        object - the to-be-appended object.
        indentation - the indentation string that should be prepended. May not be null.
      • appendSegments

        protected void appendSegments​(java.lang.String indentation,
                                      int index,
                                      java.util.List<java.lang.String> otherSegments,
                                      java.lang.String otherDelimiter)
        Add the list of segments to this sequence at the given index. The given indentation will be prepended to each line except the first one if the object has a multi-line string representation.
        Parameters:
        indentation - the indentation string that should be prepended. May not be null.
        index - the index in this instance's list of segments.
        otherSegments - the to-be-appended segments. May not be null.
        otherDelimiter - the line delimiter that was used in the otherSegments list.
      • appendSegments

        protected void appendSegments​(int index,
                                      java.util.List<java.lang.String> otherSegments,
                                      java.lang.String otherDelimiter)
        Add the list of segments to this sequence at the given index. The given indentation will be prepended to each line except the first one if the object has a multi-line string representation.
        Parameters:
        index - the index in this instance's list of segments.
        otherSegments - the to-be-appended segments. May not be null.
        otherDelimiter - the line delimiter that was used in the otherSegments list.
        Since:
        2.5
      • appendSegments

        protected void appendSegments​(int index,
                                      java.util.List<java.lang.String> otherSegments)
        Add the list of segments to this sequence at the given index. The given indentation will be prepended to each line except the first one if the object has a multi-line string representation.
        Parameters:
        index - the index in this instance's list of segments.
        otherSegments - the to-be-appended segments. May not be null.
        Since:
        2.5
      • newLine

        public void newLine()
        Add a newline to this sequence according to the configured lineDelimiter.
      • newLineIfNotEmpty

        public void newLineIfNotEmpty()
        Add a newline to this sequence according to the configured lineDelimiter if the last line contains something besides whitespace.
      • toString

        public java.lang.String toString()
        Specified by:
        toString in interface java.lang.CharSequence
        Overrides:
        toString in class java.lang.Object
      • getContent

        protected final java.util.List<java.lang.String> getContent()
        Return the actual content of this sequence, including all trailing whitespace. The return value is unsafe, that is modification to this StringConcatenation will cause changes in a previously obtained result and vice versa.
        Returns:
        the actual content of this instance. Never null.
        Since:
        2.8
      • getSignificantContent

        protected java.util.List<java.lang.String> getSignificantContent()
        Compute the significant content of this sequence. That is, trailing whitespace after the last line-break will be ignored if the last line contains only whitespace. The return value is unsafe, that is modification to this StringConcatenation will cause changes in a previously obtained result and vice versa.
        Returns:
        the significant content of this instance. Never null.
      • getLineDelimiter

        protected java.lang.String getLineDelimiter()
        Allows subtypes to access the configured line delimiter.
        Returns:
        the line delimiter
        Since:
        2.5
      • length

        public int length()

        Only the significant content of this sequence is considered.

        Specified by:
        length in interface java.lang.CharSequence
      • charAt

        public char charAt​(int index)

        Only the significant content of this sequence is considered.

        Specified by:
        charAt in interface java.lang.CharSequence
      • subSequence

        public java.lang.CharSequence subSequence​(int start,
                                                  int end)

        Only the significant content of this sequence is considered.

        Specified by:
        subSequence in interface java.lang.CharSequence
      • splitLinesAndNewLines

        protected java.util.List<java.lang.String> splitLinesAndNewLines​(java.lang.String text)
        Return a list of segments where each segment is either the content of a line in the given text or a line-break according to the configured delimiter. Existing line-breaks in the text will be replaced by this's instances delimiter.
        Parameters:
        text - the to-be-splitted text. May be null.
        Returns:
        a list of segments. Is never null.