blob: 4432558ac082871cf14e20e836e542149fecac50 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
#ifndef _DECAF_LANG_STRING_H_
#define _DECAF_LANG_STRING_H_
#include <decaf/util/Config.h>
#include <decaf/lang/CharSequence.h>
#include <decaf/lang/Comparable.h>
#include <decaf/lang/ArrayPointer.h>
#include <string>
#include <ostream>
namespace decaf {
namespace lang {
class Contents;
class AbstractStringBuilder;
/**
* An immutable sequence of characters.
*
* This class is implemented using a char[]. The length of the array may exceed
* the length of the string. For example, the string "Hello" may be backed by
* the array {@code ['H', 'e', 'l', 'l', 'o', 'W'. 'o', 'r', 'l', 'd']} with
* offset 0 and length 5.
*
* Multiple strings can share the same char[] because strings are immutable.
*
* The substring method always returns a string that shares the backing array of
* its source string. Generally this is an optimization: fewer character arrays
* need to be allocated, and less copying is necessary. But this can also lead
* to unwanted heap retention. Taking a short substring of long string means that
* the long shared char[] won't be garbage until both strings are destroyed. This
* typically happens when parsing small substrings out of a large input. To avoid
* this where necessary, call the compact method which allocates a new array that
* is just big enough to store the String's content.
*
* @since 1.0
*/
class DECAF_API String: public CharSequence {
private:
mutable Contents* contents;
public:
/**
* Creates a new empty String object. This value is equivalent to
* calling String("") and all methods will behave as if the string is
* an empty string.
*/
String();
/**
* Create a new String instance that contains N copies of the given character
* value.
*
* @param value
* The character to fill this String with.
* @param count
* The number of copies of the character to fill.
*
* @throws IndexOutOfBoundsException if the count parameter is negative.
*/
String(const char value, int count);
/**
* Create a new String object that represents the given STL string
*
* @param source
* The string to copy into this new String object.
*/
String(const String& source);
/**
* Create a new String object that represents the given STL string
*
* @param source
* The string to copy into this new String object.
*/
String(const std::string& source);
/**
* Create a new String object that represents the given array of characters, the C string
* must be null terminated in order for a proper size calculation to work. If the string
* is not properly terminated than this method can overrun the array and cause a fault.
*
* @param array
* The character buffer to copy into this new String object.
*
* @throws NullPointerException if the character array parameter is NULL.
*/
String(const char* array);
/**
* Create a new String object that represents the given array of characters. The method
* takes the size of the array as a parameter to allow for strings that are not NULL
* terminated, the caller can pass strlen(array) in the case where the array is properly
* NULL terminated.
*
* @param array
* The character buffer to copy into this new String object.
* @param size
* The size of the string buffer given, in case the string is not NULL terminated.
*
* @throws NullPointerException if the character array parameter is NULL.
* @throws IndexOutOfBoundsException if the size parameter is negative.
*/
String(const char* array, int size);
/**
* Create a new String object that represents the given array of characters, the C string
* must be null terminated in order for a proper size calculation to work. If the string
* is not properly terminated than this method can overrun the array and cause a fault.
*
* @param array
* The character buffer to copy into this new String object.
* @param offset
* The position to start copying from in the given buffer.
* @param length
* The number of bytes to copy from the given buffer starting from the offset.
*
* @throws NullPointerException if the character array parameter is NULL.
* @throws IndexOutOfBoundsException if the size, offset or length parameter is negative
* or if the length to copy is greater than the span of size - offset.
*/
String(const char* array, int offset, int length);
/**
* Create a new String object that represents the given array of characters. The method
* takes the size of the array as a parameter to allow for strings that are not NULL
* terminated, the caller can pass strlen(array) in the case where the array is properly
* NULL terminated.
*
* @param array
* The character buffer to copy into this new String object.
* @param size
* The size of the string buffer given, in case the string is not NULL terminated.
* @param offset
* The position to start copying from in the given buffer.
* @param length
* The number of bytes to copy from the given buffer starting from the offset.
*
* @throws NullPointerException if the character array parameter is NULL.
* @throws IndexOutOfBoundsException if the size, offset or length parameter is negative
* or if the length to copy is greater than the span of size - offset.
*/
String(const char* array, int size, int offset, int length);
virtual ~String();
public:
/**
* Assignment from another String instance. The internal contents of this string now
* reference the same contents as the provided String. The original contents of this
* String are not altered in other String instances that reference it.
*
* @param other
* The other String to assign to this instance.
*
* @return a reference to this string with the new contents.
*/
String& operator= (const String& other);
/**
* Assignment from another std::string instance. The internal contents of this string now
* reference a copy of the contents as the provided std::string. The original contents of
* this String are not altered in other String instances that reference it.
*
* @param other
* The other std::string to assign to this instance.
*
* @return a reference to this string with the new contents.
*/
String& operator= (const std::string& other);
/**
* Assignment from another C string instance. The internal contents of this string now
* reference a copy of the contents as the provided C string. The original contents of
* this String are not altered in other String instances that reference it.
*
* @param other
* The other C string to assign to this instance.
*
* @return a reference to this string with the new contents.
*/
String& operator= (const char* other);
/**
* Comparison operators for the various string types that uses the equals method
* to determine equality.
*
* @param other
* The string value to compare to this one.
*
* @return true if the other string is equal to this one, false otherwise.
*/
bool operator==(const char* other) const;
bool operator==(const String& other) const;
bool operator==(const std::string& other) const;
/**
* Comparison operators for the various string types that uses the equals method
* to determine equality.
*
* @param other
* The string value to compare to this one.
*
* @return true if the other string is not equal to this one, false otherwise.
*/
bool operator!=(const char* other) const;
bool operator!=(const String& other) const;
bool operator!=(const std::string& other) const;
/**
* Comparison operators for the various string types that uses the compareTo method
* to determine if the string is lexicographically less than the other.
*
* @param other
* The string value to compare to this one.
*
* @return true if this string is lexicographically less than the other string.
*/
bool operator< (const char* other) const;
bool operator< (const String& other) const;
bool operator< (const std::string& other) const;
/**
* Comparison operators for the various string types that uses the compareTo method
* to determine if the string is lexicographically less than or equal to the other.
*
* @param other
* The string value to compare to this one.
*
* @return true if this string is lexicographically less than or equal to the other string.
*/
bool operator<=(const char* other) const;
bool operator<=(const String& other) const;
bool operator<=(const std::string& other) const;
/**
* Comparison operators for the various string types that uses the compareTo method
* to determine if the string is lexicographically greater than the other.
*
* @param other
* The string value to compare to this one.
*
* @return true if this string is lexicographically greater than the other string.
*/
bool operator> (const char* other) const;
bool operator> (const String& other) const;
bool operator> (const std::string& other) const;
/**
* Comparison operators for the various string types that uses the compareTo method
* to determine if the string is lexicographically greater than or equal to the other.
*
* @param other
* The string value to compare to this one.
*
* @return true if this string is lexicographically greater than the other string.
*/
bool operator>=(const char* other) const;
bool operator>=(const String& other) const;
bool operator>=(const std::string& other) const;
/**
* Concatenation operators for the various string types. The value of this string
* and the given string are concatenated and returned in a new String instance.
*
* @param other
* The string whose value is to be concatenated with this one.
*
* @return a new String instance that is the concatenation of the two strings.
*/
String operator+ (const String& other) const;
String operator+ (const std::string& other) const;
String operator+ (const char* other) const;
/**
* Returns a const char* value to allow easier coexistence with standard c++
* string operations.
*
* This method can result in a compaction of the String's backing store into a
* new character array in order to return a pointer value that is guaranteed to
* be NULL terminated.
*
* @return a const char* value for this String.
*/
const char* c_str() const;
public:
/**
* If the String instance is holding a reference to a character array that is larger
* than the string's view of the backing store a new array is allocated and the
* characters from the substring this String represents are copied to the new backing
* store and returned in the resulting String object.
*
* This can free up heap memory when a String is holding a large array but only
* viewing a small portion of it and the original source String is no longer also
* maintaining a reference to the backing store.
*
* @return a new String instance with a compacted backing store.
*/
String compact() const;
/**
* Compares two strings lexicographically. The comparison is based on the value
* of each character in the strings. The character sequence represented by this
* String is compared lexicographically to the character sequence represented by
* the provided string. The result is a negative number if this String
* lexicographically precedes the argument string. The result is a positive value
* if this String lexicographically follows the argument string. The result is
* zero if the strings are equal; compareTo returns 0 exactly when the equals
* method would return true.
*
* @param string
* the string to compare.
*
* @return 0 if the strings are equal, a negative integer if this string is
* before the specified string, or a positive integer if this string
* is after the specified string.
*/
int compareTo(const String& string) const;
/**
* Compares two strings lexicographically. The comparison is based on the value
* of each character in the strings. The character sequence represented by this
* String is compared lexicographically to the character sequence represented by
* the provided string. The result is a negative number if this String
* lexicographically precedes the argument string. The result is a positive value
* if this String lexicographically follows the argument string. The result is
* zero if the strings are equal; compareTo returns 0 exactly when the equals
* method would return true.
*
* @param string
* the STL string to compare.
*
* @return 0 if the strings are equal, a negative integer if this string is
* before the specified string, or a positive integer if this string
* is after the specified string.
*/
int compareTo(const std::string& string) const;
/**
* Compares two strings lexicographically. The comparison is based on the value
* of each character in the strings. The character sequence represented by this
* String is compared lexicographically to the character sequence represented by
* the provided string. The result is a negative number if this String
* lexicographically precedes the argument string. The result is a positive value
* if this String lexicographically follows the argument string. The result is
* zero if the strings are equal; compareTo returns 0 exactly when the equals
* method would return true.
*
* @param string
* the C string to compare.
*
* @return 0 if the strings are equal, a negative integer if this string is
* before the specified string, or a positive integer if this string
* is after the specified string.
*
* @throws NullPointerException if the passed in C String value is NULL.
*/
int compareTo(const char* string) const;
/**
* Compares two strings lexicographically, ignoring case differences. This method
* returns an integer whose sign is that of calling compareTo with normalized
* versions of the strings where case differences have been eliminated by calling
* Character::toLowerCase() on each character.
*
* @param string
* the string to compare.
*
* @return 0 if the strings are equal, a negative integer if this string is
* before the specified string, or a positive integer if this string
* is after the specified string.
*/
int compareToIgnoreCase(const String& string) const;
/**
* Compares two strings lexicographically, ignoring case differences. This method
* returns an integer whose sign is that of calling compareTo with normalized
* versions of the strings where case differences have been eliminated by calling
* Character::toLowerCase() on each character.
*
* @param string
* the STL string to compare.
*
* @return 0 if the strings are equal, a negative integer if this string is
* before the specified string, or a positive integer if this string
* is after the specified string.
*/
int compareToIgnoreCase(const std::string& string) const;
/**
* Compares two strings lexicographically, ignoring case differences. This method
* returns an integer whose sign is that of calling compareTo with normalized
* versions of the strings where case differences have been eliminated by calling
* Character::toLowerCase() on each character.
*
* @param string
* the C string to compare.
*
* @return 0 if the strings are equal, a negative integer if this string is
* before the specified string, or a positive integer if this string
* is after the specified string.
*
* @throws NullPointerException if the passed in C String value is NULL.
*/
int compareToIgnoreCase(const char* string) const;
/**
* Concatenates this string and the specified string.
*
* @param string
* the string to concatenate onto this String
*
* @return a new string which is the concatenation of this string and the
* specified string.
*/
String concat(const String& string) const;
/**
* Concatenates this string and the specified std::string.
*
* @param string
* the STL string to concatenate onto this String
*
* @return a new string which is the concatenation of this string and the
* specified string.
*/
String concat(const std::string& string) const;
/**
* Concatenates this string and the specified C string.
*
* @param string
* the C string to concatenate onto this String
*
* @return a new string which is the concatenation of this string and the
* specified string.
*/
String concat(const char* string) const;
/**
* Determines if this String contains the sequence of characters in the String
* passed in.
*
* @param string
* the String value to search for.
*
* @return true if the sequence of characters are contained in this String,
* otherwise returns false.
*/
bool contains(const String& string) const;
/**
* Determines if this String contains the sequence of characters in the std::string
* passed in.
*
* @param string
* the STL String value to search for.
*
* @return true if the sequence of characters are contained in this String,
* otherwise returns false.
*/
bool contains(const std::string& string) const;
/**
* Determines if this String contains the sequence of characters in the C String
* passed in. If the value given is null the method always returns false.
*
* @param string
* the C String value to search for.
*
* @return true if the sequence of characters are contained in this String,
* otherwise returns false.
*/
bool contains(const char* string) const;
/**
* Compares the specified string to this string to determine if the
* specified string is a suffix.
*
* @param suffix
* the suffix to look for.
*
* @return true if the specified string is a suffix of this string, false otherwise.
*/
bool endsWith(const String& suffix) const;
/**
* Returns true if this String is equal to the given String instance.
*
* @param other
* A String instance to compare to this string.
*
* @return true if this String is equal to the given String instance.
*/
bool equals(const String& other) const;
/**
* Returns true if this String is equal to the given std::string instance.
*
* @param other
* A standard string instance to compare to this String.
*
* @return true if this String is equal to the given std::string instance.
*/
bool equals(const std::string& other) const;
/**
* Returns true if this String is equal to the given C string instance. This method
* treats the NULL pointer case as equivalent to the empty string case and returns
* true if this String instance is also empty.
*
* @param other
* A C string instance to compare to this String.
*
* @return true if this String is equal to the given C string instance.
*/
bool equals(const char* other) const;
/**
* Compares the specified string to this string ignoring the case of the
* characters and returns true if they are equal.
*
* @param string
* the string to compare.
*
* @return true if the specified string is equal to this string, false otherwise.
*/
bool equalsIgnoreCase(const String& string) const;
/**
* Compares the specified std::string to this String ignoring the case of the
* characters and returns true if they are equal.
*
* @param string
* the std::string to compare.
*
* @return true if the specified string is equal to this String, false otherwise.
*/
bool equalsIgnoreCase(const std::string& string) const;
/**
* Compares the specified C string to this string ignoring the case of the
* characters and returns true if they are equal.
*
* @param string
* the C string to compare.
*
* @return true if the specified C string is equal to this string, false otherwise.
*/
bool equalsIgnoreCase(const char* string) const;
/**
* Searches in this string for the first index of any character in the specified
* String. The search for the matching characters starts at the beginning and moves
* towards the end of this string.
*
* @param string
* the characters to find the first of within this String.
*
* @return the index of the first character of the specified string in this
* string, -1 if none of the characters in the String exist in this String.
*/
int findFirstOf(const String& chars) const;
/**
* Searches in this string for the first index of any character in the specified
* String. The search for the matching characters starts at the given index and moves
* towards the end of this string.
*
* @param chars
* the characters to find the first of within this String.
* @param start
* the starting offset.
*
* @return the index of the first character of the specified string in this
* string, -1 if none of the characters in the String exist in this String.
*/
int findFirstOf(const String& chars, int start) const;
/**
* Searches in this string for the first index of any character that is not in the
* specified String. The search for the non-matching characters starts at the beginning
* and moves towards the end of this string.
*
* @param chars
* the characters to find the first non-matching index of within this String.
*
* @return the index of the first character not in the specified string in this
* string, -1 if all of the characters in the given String exist in this String.
*/
int findFirstNotOf(const String& chars) const;
/**
* Searches in this string for the first index of any character that is not in the
* specified String. The search for the non-matching characters starts at the given index
* and moves towards the end of this string.
*
* @param chars
* the characters to find the first non-matching index of within this String.
* @param start
* the starting offset.
*
* @return the index of the first character not in the specified string in this
* string, -1 if all of the characters in the given String exist in this String.
*/
int findFirstNotOf(const String& chars, int start) const;
/**
* Copies characters from this String into the destination char array, starting from
* the given index.
*
* @param srcBegin
* Starting index in this String for the copy operation.
* @param srcEnd
* The index at which the copy ends, this value is not copied.
* @param dest
* The destination character array to copy the data to.
* @param destSize
* The size of the destination array.
* @param destBegin
* The offset into the destination array to start copying to.
*
* @throws IndexOutOfBoundsException if any of the following conditions are met:
* srcBegin or srcEnd are negative.
* srcBegin is greater than src end.
* srcEnd is greater than the length()
* destSize or destBegin are negative.
* destBegin + (srcEnd - srcBegin) is greater than destSize.
*/
void getChars(int srcBegin, int srcEnd, char* dest, int destSize, int destBegin) const;
/**
* Returns a hash code for this String instance, the hash code for an empty
* String will always be zero.
*
* @return a hash code for this String instance.
*/
int hashCode() const;
/**
* Searches in this string for the first index of the specified character.
* The search for the character starts at the beginning and moves towards
* the end of this string.
*
* @param c
* the character to find.
*
* @return the index in this string of the specified character, -1 if the
* character isn't found.
*/
int indexOf(char value) const;
/**
* Searches in this string for the index of the specified character. The
* search for the character starts at the specified offset and moves towards
* the end of this string.
*
* If the start value given is less than zero the search starts at the beginning
* of the string. If the start value is greater than the length of the string
* minus one is returned.
*
* @param value
* the character to find.
* @param start
* the starting offset.
*
* @return the index in this string of the specified character, -1 if the
* character isn't found.
*/
int indexOf(char value, int start) const;
/**
* Searches in this string for the first index of the specified string. The
* search for the string starts at the beginning and moves towards the end
* of this string.
*
* @param string
* the string to find within this String.
*
* @return the index of the first character of the specified string in this
* string, -1 if the specified string is not a substring.
*/
int indexOf(const String& string) const;
/**
* Searches in this string for the index of the specified string. The search
* for the string starts at the specified offset and moves towards the end
* of this string.
*
* @param subString
* the string to find within this String.
* @param start
* the starting offset.
*
* @return the index of the first character of the specified string in this
* string, -1 if the specified string is not a substring.
*/
int indexOf(const String& subString, int start) const;
/**
* Searches in this String for the first index of the specified std::string. The
* search for the string starts at the beginning and moves towards the end
* of this string.
*
* @param string
* the STL string to find within this String.
*
* @return the index of the first character of the specified string in this
* string, -1 if the specified string is not a substring.
*/
int indexOf(const std::string& string) const;
/**
* Searches in this string for the index of the specified std::string. The search
* for the string starts at the specified offset and moves towards the end
* of this string.
*
* @param subString
* the STL string to find within this String.
* @param start
* the starting offset.
*
* @return the index of the first character of the specified string in this
* string, -1 if the specified string is not a substring.
*/
int indexOf(const std::string& subString, int start) const;
/**
* Searches in this String for the first index of the specified C string. The
* search for the string starts at the beginning and moves towards the end
* of this string. If the given string pointer is NULL this method returns -1.
*
* @param string
* the C string to find within this String.
*
* @return the index of the first character of the specified string in this
* string, -1 if the specified string is not a substring.
*/
int indexOf(const char* string) const;
/**
* Searches in this string for the index of the specified C string. The search
* for the string starts at the specified offset and moves towards the end
* of this string. If the given string pointer is NULL this method returns -1.
*
* @param subString
* the C string to find within this String.
* @param start
* the starting offset.
*
* @return the index of the first character of the specified string in this
* string, -1 if the specified string is not a substring.
*/
int indexOf(const char* subString, int start) const;
/**
* @return true if the length of this String is zero.
*/
bool isEmpty() const;
/**
* Searches in this string for the last index of the specified character.
* The search for the character starts at the end and moves towards the
* beginning of this string.
*
* @param value
* the character to find.
*
* @return the index in this string of the specified character, -1 if the
* character isn't found.
*/
int lastIndexOf(char value) const;
/**
* Searches in this string for the index of the specified character. The
* search for the character starts at the specified offset and moves towards
* the beginning of this string.
*
* @param value
* the character to find.
* @param start
* the starting offset.
*
* @return the index in this string of the specified character, -1 if the
* character isn't found.
*/
int lastIndexOf(char value, int start) const;
/**
* Searches in this string for the last index of the specified string. The
* search for the string starts at the end and moves towards the beginning
* of this string.
*
* @param string
* the string to find.
*
* @return the index of the first character of the specified string in this
* string, -1 if the specified string is not a substring.
*/
int lastIndexOf(const String& string) const;
/**
* Searches in this string for the index of the specified string. The search
* for the string starts at the specified offset and moves towards the
* beginning of this string.
*
* @param subString
* the string to find.
* @param start
* the starting offset.
*
* @return the index of the first character of the specified string in this
* string , -1 if the specified string is not a substring.
*/
int lastIndexOf(const String& subString, int start) const;
/**
* Searches in this string for the last index of the specified std::string. The
* search for the string starts at the end and moves towards the beginning
* of this string.
*
* @param string
* the STL string to find.
*
* @return the index of the first character of the specified string in this
* string, -1 if the specified string is not a substring.
*/
int lastIndexOf(const std::string& string) const;
/**
* Searches in this string for the index of the specified std::string. The search
* for the string starts at the specified offset and moves towards the
* beginning of this string.
*
* @param subString
* the STL string to find.
* @param start
* the starting offset.
*
* @return the index of the first character of the specified string in this
* string , -1 if the specified string is not a substring.
*/
int lastIndexOf(const std::string& subString, int start) const;
/**
* Searches in this string for the last index of the specified C string. The
* search for the string starts at the end and moves towards the beginning
* of this string.
*
* @param string
* the C string to find.
*
* @return the index of the first character of the specified string in this
* string, -1 if the specified string is not a substring.
*/
int lastIndexOf(const char* string) const;
/**
* Searches in this string for the index of the specified C string. The search
* for the string starts at the specified offset and moves towards the
* beginning of this string.
*
* @param subString
* the C string to find.
* @param start
* the starting offset.
*
* @return the index of the first character of the specified string in this
* string , -1 if the specified string is not a substring.
*/
int lastIndexOf(const char* subString, int start) const;
/**
* Compares the specified string to this string and compares the specified
* range of characters to determine if they are the same. The method returns
* false is any of the index values are negative or result in a span that would
* exceed the length of either string.
*
* @param thisStart
* the starting offset in this string.
* @param string
* the string to compare.
* @param start
* the starting offset in the specified string.
* @param length
* the number of characters to compare.
*
* @return true if the ranges of characters are equal, false otherwise
*/
bool regionMatches(int thisStart, const String& string, int start, int length) const;
/**
* Compares the specified string to this string and compares the specified
* range of characters to determine if they are the same. When ignoreCase is
* true, the case of the characters is ignored during the comparison.
*
* @param ignoreCase
* specifies if case should be ignored.
* @param thisStart
* the starting offset in this string.
* @param string
* the string to compare.
* @param start
* the starting offset in the specified string.
* @param length
* the number of characters to compare.
*
* @return true if the ranges of characters are equal, false otherwise.
*/
bool regionMatches(bool ignoreCase, int thisStart, const String& string, int start, int length) const;
/**
* Copies this string replacing occurrences of the specified character with
* another character.
*
* @param oldChar
* the character to replace.
* @param newChar
* the replacement character.
*
* @return a new string with occurrences of oldChar replaced by newChar.
*/
String replace(char oldChar, char newChar) const;
/**
* Compares the specified string to this string to determine if the specified
* string is a prefix. If the prefix string is empty or is equal to this String
* than true is returned.
*
* @param prefix
* the string to look for.
*
* @return if the specified string is a prefix of this string, false otherwise
*/
bool startsWith(const String& prefix) const;
/**
* Compares the specified string to this string, starting at the specified
* offset, to determine if the specified string is a prefix.
*
* @param prefix
* the string to look for.
* @param start
* the starting offset.
*
* @return true if the specified string occurs in this string at the specified
* offset, false otherwise.
*/
bool startsWith(const String& prefix, int start) const;
/**
* Copies a range of characters into a new string starting from the given offset and
* extending to the end of this String.
*
* @param start
* the offset of the first character.
*
* @return a new string containing the characters from start to the end of the string.
*
* @throws IndexOutOfBoundsException if start < 0 or start > length().
*/
String substring(int start) const;
/**
* Copies a range of characters into a new string. The length of the returned String
* is end - start meaning that the characters in the new string include only start to
* end - 1.
*
* @param start
* the offset of the first character. (inclusive)
* @param end
* the offset one past the last character. (exclusive)
*
* @return a new string containing the characters from start to end - 1.
*
* @throws IndexOutOfBoundsException if start < 0, start > end or end > length().
*/
String substring(int start, int end) const;
/**
* Copies the characters in this string to a newly allocated character array. The
* returned array is the property of the caller and must be deleted by them. If the
* String is empty then a NULL is returned.
*
* The array returned is not guaranteed to be null terminated as the array is
* sized according to the result of calling length().
*
* @return a character array containing the characters of this string.
*/
char* toCharArray() const;
/**
* Converts the characters in this string to lower case. The resulting value
* is returned in a new String instance and this one is left unchanged.
*
* @return a new string containing the lower case characters equivalent to
* the characters in this string.
*/
String toLowerCase() const;
/**
* Converts the characters in this string to upper case. The resulting value
* is returned in a new String instance and this one is left unchanged.
*
* @return a new string containing the upper case characters equivalent to
* the characters in this string.
*/
String toUpperCase() const;
/**
* Returns a copy of the string, with leading and trailing whitespace omitted.
*
* @return a copy of the string, with leading and trailing whitespace omitted.
*/
String trim() const;
public:
/**
* {@inheritDoc}
*/
virtual int length() const;
/**
* {@inheritDoc}
*/
virtual char charAt(int index) const;
/**
* {@inheritDoc}
*/
virtual CharSequence* subSequence(int start, int end) const;
/**
* {@inheritDoc}
*/
virtual std::string toString() const;
public:
/**
* Creates a new string containing the characters in the specified character
* array. Modifying the character array after creating the string has no
* effect on the string.
*
* @param data
* the array of characters.
*
* @return the new string.
*
* @throws NullPointerException if the C string pointer is NULL
*/
static String copyValueOf(const char* data);
/**
* Creates a new string containing the specified characters in the character
* array. Modifying the character array after creating the string has no
* effect on the string.
*
* @param data
* the array of characters.
* @param start
* the starting offset in the character array.
* @param length
* the number of characters to use.
*
* @return the new string.
*
* @throws NullPointerException if the C string is NULL
* @throws IndexOutOfBoundsException
* if length < 0, start < 0 or start + length > the C string's length.
*/
static String copyValueOf(char* data, int start, int length);
/**
* Given a C String pointer return true if the value is either NULL or the
* string contained is empty.
*
* @return true if the C string is either a NULL or an Empty string.
*/
static bool isNullOrEmpty(const char*);
/**
* Returns a String that represents the value of the given boolean value.
*
* @param value
* The value whose string representation is to be returned.
*
* @return "true" if the boolean is true, "false" otherwise.
*/
static String valueOf(bool value);
/**
* Returns a String that represents the value of the given char value.
*
* @param value
* The value whose string representation is to be returned.
*
* @return a String that contains the single character value given.
*/
static String valueOf(char value);
/**
* Returns a String that represents the value of the given float value.
*
* @param value
* The value whose string representation is to be returned.
*
* @return a String that contains the string representation of the float value given.
*/
static String valueOf(float value);
/**
* Returns a String that represents the value of the given double value.
*
* @param value
* The value whose string representation is to be returned.
*
* @return a String that contains the string representation of the double value given.
*/
static String valueOf(double value);
/**
* Returns a String that represents the value of the given short value.
*
* @param value
* The value whose string representation is to be returned.
*
* @return a String that contains the string representation of the short value given.
*/
static String valueOf(short value);
/**
* Returns a String that represents the value of the given integer value.
*
* @param value
* The value whose string representation is to be returned.
*
* @return a String that contains the string representation of the integer value given.
*/
static String valueOf(int value);
/**
* Returns a String that represents the value of the given 64bit long value.
*
* @param value
* The value whose string representation is to be returned.
*
* @return a String that contains the string representation of the 64 bit long value given.
*/
static String valueOf(long long value);
private:
/**
* Version of getChars without bounds checks, for use by other classes
* within the java.lang package only. The caller is responsible for
* ensuring that start >= 0 && start <= end && end <= count.
*/
void getChars(int start, int end, char* buffer, int index) const;
String(Contents* content);
String(int offset, int length, const ArrayPointer<char> content);
friend class AbstractStringBuilder;
};
std::ostream& operator<<(std::ostream &out, const String& target);
bool operator==(const std::string& left, const String& right);
bool operator==(const char* left, const String& right);
bool operator!=(const std::string& left, const String& right);
bool operator!=(const char* left, const String& right);
bool operator<=(const std::string& left, const String& right);
bool operator<=(const char* left, const String& right);
bool operator>=(const std::string& left, const String& right);
bool operator>=(const char* left, const String& right);
bool operator< (const std::string& left, const String& right);
bool operator< (const char* left, const String& right);
bool operator> (const std::string& left, const String& right);
bool operator> (const char* left, const String& right);
}}
#endif /* _DECAF_LANG_STRING_H_ */