2007-12-01 00:00:00 +00:00
/ *
2015-01-26 17:26:49 +00:00
* Copyright ( c ) 1994 , 2015 , Oracle and / or its affiliates . All rights reserved .
2007-12-01 00:00:00 +00:00
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
2010-05-25 15:58:33 -07:00
* published by the Free Software Foundation . Oracle designates this
2007-12-01 00:00:00 +00:00
* particular file as subject to the " Classpath " exception as provided
2010-05-25 15:58:33 -07:00
* by Oracle in the LICENSE file that accompanied this code .
2007-12-01 00:00:00 +00:00
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
2010-05-25 15:58:33 -07:00
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
2007-12-01 00:00:00 +00:00
* /
package java.lang ;
import java.io.ObjectStreamField ;
import java.io.UnsupportedEncodingException ;
import java.nio.charset.Charset ;
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.Comparator ;
import java.util.Formatter ;
import java.util.Locale ;
2013-01-22 11:14:13 -05:00
import java.util.Objects ;
2015-01-26 17:26:49 +00:00
import java.util.Spliterator ;
2013-04-02 18:41:04 -04:00
import java.util.StringJoiner ;
2007-12-01 00:00:00 +00:00
import java.util.regex.Matcher ;
import java.util.regex.Pattern ;
import java.util.regex.PatternSyntaxException ;
2015-01-26 17:26:49 +00:00
import java.util.stream.IntStream ;
import java.util.stream.StreamSupport ;
8076112: Add @HotSpotIntrinsicCandidate annotation to indicate methods for which Java Runtime has intrinsics
Annotate possibly intrinsified methods with @HotSpotIntrinsicCandidate. Add checks omitted by intrinsics to the library code. Add CheckIntrinsics flags to check consistency of intrinsics.
Reviewed-by: jrose, kvn, thartmann, vlivanov, abuckley, darcy, ascarpino, briangoetz, alanb, aph, dnsimon
2015-07-03 07:23:45 +02:00
import jdk.internal.HotSpotIntrinsicCandidate ;
2007-12-01 00:00:00 +00:00
/ * *
2012-01-23 12:17:30 -08:00
* The { @code String } class represents character strings . All
* string literals in Java programs , such as { @code " abc " } , are
2007-12-01 00:00:00 +00:00
* implemented as instances of this class .
* < p >
* Strings are constant ; their values cannot be changed after they
* are created . String buffers support mutable strings .
* Because String objects are immutable they can be shared . For example :
2013-10-22 17:02:08 -04:00
* < blockquote > < pre >
2007-12-01 00:00:00 +00:00
* String str = " abc " ;
* < / pre > < / blockquote > < p >
* is equivalent to :
2013-10-22 17:02:08 -04:00
* < blockquote > < pre >
2007-12-01 00:00:00 +00:00
* char data [ ] = { 'a' , 'b' , 'c' } ;
* String str = new String ( data ) ;
* < / pre > < / blockquote > < p >
* Here are some more examples of how strings can be used :
2013-10-22 17:02:08 -04:00
* < blockquote > < pre >
2007-12-01 00:00:00 +00:00
* System . out . println ( " abc " ) ;
* String cde = " cde " ;
* System . out . println ( " abc " + cde ) ;
* String c = " abc " . substring ( 2 , 3 ) ;
* String d = cde . substring ( 1 , 2 ) ;
* < / pre > < / blockquote >
* < p >
2012-01-23 12:17:30 -08:00
* The class { @ code String } includes methods for examining
2007-12-01 00:00:00 +00:00
* individual characters of the sequence , for comparing strings , for
* searching strings , for extracting substrings , and for creating a
* copy of a string with all characters translated to uppercase or to
* lowercase . Case mapping is based on the Unicode Standard version
* specified by the { @link java . lang . Character Character } class .
* < p >
* The Java language provides special support for the string
* concatenation operator ( & nbsp ; + & nbsp ; ) , and for conversion of
* other objects to strings . String concatenation is implemented
2012-01-23 12:17:30 -08:00
* through the { @code StringBuilder } ( or { @code StringBuffer } )
* class and its { @code append } method .
2007-12-01 00:00:00 +00:00
* String conversions are implemented through the method
2012-01-23 12:17:30 -08:00
* { @code toString } , defined by { @code Object } and
2007-12-01 00:00:00 +00:00
* inherited by all classes in Java . For additional information on
* string concatenation and conversion , see Gosling , Joy , and Steele ,
* < i > The Java Language Specification < / i > .
*
2015-08-06 13:20:13 +03:00
* < p > Unless otherwise noted , passing a { @code null } argument to a constructor
2007-12-01 00:00:00 +00:00
* or method in this class will cause a { @link NullPointerException } to be
* thrown .
*
2012-01-23 12:17:30 -08:00
* < p > A { @code String } represents a string in the UTF - 16 format
2007-12-01 00:00:00 +00:00
* in which < em > supplementary characters < / em > are represented by < em > surrogate
* pairs < / em > ( see the section < a href = " Character.html#unicode " > Unicode
2012-01-23 12:17:30 -08:00
* Character Representations < / a > in the { @code Character } class for
2007-12-01 00:00:00 +00:00
* more information ) .
2012-01-23 12:17:30 -08:00
* Index values refer to { @code char } code units , so a supplementary
* character uses two positions in a { @code String } .
* < p > The { @code String } class provides methods for dealing with
2007-12-01 00:00:00 +00:00
* Unicode code points ( i . e . , characters ) , in addition to those for
2012-01-23 12:17:30 -08:00
* dealing with Unicode code units ( i . e . , { @code char } values ) .
2007-12-01 00:00:00 +00:00
*
2015-10-27 09:20:24 -07:00
* < p > Unless otherwise noted , methods for comparing Strings do not take locale
* into account . The { @link java . text . Collator } class provides methods for
* finer - grain , locale - sensitive String comparison .
*
2007-12-01 00:00:00 +00:00
* @author Lee Boynton
* @author Arthur van Hoff
2010-06-30 16:11:32 -07:00
* @author Martin Buchholz
* @author Ulf Zibis
2007-12-01 00:00:00 +00:00
* @see java . lang . Object # toString ( )
* @see java . lang . StringBuffer
* @see java . lang . StringBuilder
* @see java . nio . charset . Charset
2014-06-10 16:18:54 -07:00
* @since 1 . 0
2007-12-01 00:00:00 +00:00
* /
public final class String
2012-05-17 10:06:19 -07:00
implements java . io . Serializable , Comparable < String > , CharSequence {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
2007-12-01 00:00:00 +00:00
/** The value is used for character storage. */
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
private final byte [ ] value ;
/ * *
* The identifier of the encoding used to encode the bytes in
* { @code value } . The supported values in this implementation are
*
* LATIN1
* UTF16
*
* /
private final byte coder ;
2007-12-01 00:00:00 +00:00
/** Cache the hash code for the string */
private int hash ; // Default to 0
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = - 6849794470754667710L ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
/ * *
* If String compaction is disabled , the bytes in { @code value } are
* always encoded in UTF16 .
*
* For methods with several possible implementation paths , when String
* compaction is disabled , only one code path is taken .
*
* The instance field value is generally opaque to optimizing JIT
* compilers . Therefore , in performance - sensitive place , an explicit
* check of the static boolean { @code COMPACT_STRINGS } is done first
* before checking the { @code coder } field since the static boolean
* { @code COMPACT_STRINGS } would be constant folded away by an
* optimizing JIT compiler . The idioms for these cases are as follows .
*
* For code such as :
*
* if ( coder = = LATIN1 ) { . . . }
*
* can be written more optimally as
*
* if ( coder ( ) = = LATIN1 ) { . . . }
*
* or :
*
* if ( COMPACT_STRINGS & & coder = = LATIN1 ) { . . . }
*
* An optimizing JIT compiler can fold the above conditional as :
*
* COMPACT_STRINGS = = true = > if ( coder = = LATIN1 ) { . . . }
* COMPACT_STRINGS = = false = > if ( false ) { . . . }
*
* @implNote
* The actual value for this field is injected by JVM . The static
* initialization block is used to set the value here to communicate
* that this static final field is not statically foldable , and to
* avoid any possible circular dependency during vm initialization .
* /
static final boolean COMPACT_STRINGS ;
static {
COMPACT_STRINGS = true ;
}
2007-12-01 00:00:00 +00:00
/ * *
* Class String is special cased within the Serialization Stream Protocol .
*
2013-11-08 17:50:24 -05:00
* A String instance is written into an ObjectOutputStream according to
2013-11-21 16:02:16 -08:00
* < a href = " {@docRoot}/../platform/serialization/spec/output.html " >
2013-11-08 17:50:24 -05:00
* Object Serialization Specification , Section 6 . 2 , " Stream Elements " < / a >
2007-12-01 00:00:00 +00:00
* /
private static final ObjectStreamField [ ] serialPersistentFields =
2013-04-02 18:41:04 -04:00
new ObjectStreamField [ 0 ] ;
2007-12-01 00:00:00 +00:00
/ * *
* Initializes a newly created { @code String } object so that it represents
* an empty character sequence . Note that use of this constructor is
* unnecessary since Strings are immutable .
* /
public String ( ) {
2015-01-14 21:35:52 +03:00
this . value = " " . value ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
this . coder = " " . coder ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Initializes a newly created { @code String } object so that it represents
* the same sequence of characters as the argument ; in other words , the
* newly created string is a copy of the argument string . Unless an
* explicit copy of { @code original } is needed , use of this constructor is
* unnecessary since Strings are immutable .
*
* @param original
* A { @code String }
* /
8076112: Add @HotSpotIntrinsicCandidate annotation to indicate methods for which Java Runtime has intrinsics
Annotate possibly intrinsified methods with @HotSpotIntrinsicCandidate. Add checks omitted by intrinsics to the library code. Add CheckIntrinsics flags to check consistency of intrinsics.
Reviewed-by: jrose, kvn, thartmann, vlivanov, abuckley, darcy, ascarpino, briangoetz, alanb, aph, dnsimon
2015-07-03 07:23:45 +02:00
@HotSpotIntrinsicCandidate
2007-12-01 00:00:00 +00:00
public String ( String original ) {
2012-05-17 10:06:19 -07:00
this . value = original . value ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
this . coder = original . coder ;
2012-05-17 10:06:19 -07:00
this . hash = original . hash ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Allocates a new { @code String } so that it represents the sequence of
* characters currently contained in the character array argument . The
* contents of the character array are copied ; subsequent modification of
* the character array does not affect the newly created string .
*
* @param value
* The initial value of the string
* /
public String ( char value [ ] ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
this ( value , 0 , value . length , null ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Allocates a new { @code String } that contains characters from a subarray
* of the character array argument . The { @code offset } argument is the
* index of the first character of the subarray and the { @code count }
* argument specifies the length of the subarray . The contents of the
* subarray are copied ; subsequent modification of the character array does
* not affect the newly created string .
*
* @param value
2015-05-15 22:10:29 +03:00
* Array that is the source of characters
2007-12-01 00:00:00 +00:00
*
* @param offset
* The initial offset
*
* @param count
* The length
*
* @throws IndexOutOfBoundsException
2014-12-10 14:11:05 -08:00
* If { @code offset } is negative , { @code count } is negative , or
* { @code offset } is greater than { @code value . length - count }
2007-12-01 00:00:00 +00:00
* /
public String ( char value [ ] , int offset , int count ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
this ( value , offset , count , rangeCheck ( value , offset , count ) ) ;
}
private static Void rangeCheck ( char [ ] value , int offset , int count ) {
checkBoundsOffCount ( offset , count , value . length ) ;
return null ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Allocates a new { @code String } that contains characters from a subarray
* of the < a href = " Character.html#unicode " > Unicode code point < / a > array
* argument . The { @code offset } argument is the index of the first code
* point of the subarray and the { @code count } argument specifies the
* length of the subarray . The contents of the subarray are converted to
* { @code char } s ; subsequent modification of the { @code int } array does not
* affect the newly created string .
*
* @param codePoints
* Array that is the source of Unicode code points
*
* @param offset
* The initial offset
*
* @param count
* The length
*
* @throws IllegalArgumentException
* If any invalid Unicode code point is found in { @code
* codePoints }
*
* @throws IndexOutOfBoundsException
2014-12-10 14:11:05 -08:00
* If { @code offset } is negative , { @code count } is negative , or
* { @code offset } is greater than { @code codePoints . length - count }
2007-12-01 00:00:00 +00:00
*
* @since 1 . 5
* /
public String ( int [ ] codePoints , int offset , int count ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
checkBoundsOffCount ( offset , count , codePoints . length ) ;
if ( count = = 0 ) {
this . value = " " . value ;
this . coder = " " . coder ;
return ;
}
if ( COMPACT_STRINGS ) {
byte [ ] val = StringLatin1 . toBytes ( codePoints , offset , count ) ;
if ( val ! = null ) {
this . coder = LATIN1 ;
this . value = val ;
2015-01-14 21:35:52 +03:00
return ;
}
2007-12-01 00:00:00 +00:00
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
this . coder = UTF16 ;
this . value = StringUTF16 . toBytes ( codePoints , offset , count ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Allocates a new { @code String } constructed from a subarray of an array
* of 8 - bit integer values .
*
* < p > The { @code offset } argument is the index of the first byte of the
* subarray , and the { @code count } argument specifies the length of the
* subarray .
*
* < p > Each { @code byte } in the subarray is converted to a { @code char } as
* specified in the method above .
*
* @deprecated This method does not properly convert bytes into characters .
* As of JDK & nbsp ; 1 . 1 , the preferred way to do this is via the
* { @code String } constructors that take a { @link
* java . nio . charset . Charset } , charset name , or that use the platform ' s
* default charset .
*
* @param ascii
* The bytes to be converted to characters
*
* @param hibyte
* The top 8 bits of each 16 - bit Unicode code unit
*
* @param offset
* The initial offset
* @param count
* The length
*
* @throws IndexOutOfBoundsException
2014-12-10 14:11:05 -08:00
* If { @code offset } is negative , { @code count } is negative , or
* { @code offset } is greater than { @code ascii . length - count }
2007-12-01 00:00:00 +00:00
*
* @see # String ( byte [ ] , int )
* @see # String ( byte [ ] , int , int , java . lang . String )
* @see # String ( byte [ ] , int , int , java . nio . charset . Charset )
* @see # String ( byte [ ] , int , int )
* @see # String ( byte [ ] , java . lang . String )
* @see # String ( byte [ ] , java . nio . charset . Charset )
* @see # String ( byte [ ] )
* /
@Deprecated
public String ( byte ascii [ ] , int hibyte , int offset , int count ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
checkBoundsOffCount ( offset , count , ascii . length ) ;
if ( count = = 0 ) {
this . value = " " . value ;
this . coder = " " . coder ;
return ;
}
if ( COMPACT_STRINGS & & ( byte ) hibyte = = 0 ) {
this . value = Arrays . copyOfRange ( ascii , offset , offset + count ) ;
this . coder = LATIN1 ;
2007-12-01 00:00:00 +00:00
} else {
hibyte < < = 8 ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
byte [ ] val = StringUTF16 . newBytesFor ( count ) ;
for ( int i = 0 ; i < count ; i + + ) {
StringUTF16 . putChar ( val , i , hibyte | ( ascii [ offset + + ] & 0xff ) ) ;
2007-12-01 00:00:00 +00:00
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
this . value = val ;
this . coder = UTF16 ;
2007-12-01 00:00:00 +00:00
}
}
/ * *
* Allocates a new { @code String } containing characters constructed from
* an array of 8 - bit integer values . Each character < i > c < / i > in the
* resulting string is constructed from the corresponding component
* < i > b < / i > in the byte array such that :
*
* < blockquote > < pre >
* < b > < i > c < / i > < / b > = = ( char ) ( ( ( hibyte & amp ; 0xff ) & lt ; & lt ; 8 )
* | ( < b > < i > b < / i > < / b > & amp ; 0xff ) )
* < / pre > < / blockquote >
*
* @deprecated This method does not properly convert bytes into
* characters . As of JDK & nbsp ; 1 . 1 , the preferred way to do this is via the
* { @code String } constructors that take a { @link
* java . nio . charset . Charset } , charset name , or that use the platform ' s
* default charset .
*
* @param ascii
* The bytes to be converted to characters
*
* @param hibyte
* The top 8 bits of each 16 - bit Unicode code unit
*
* @see # String ( byte [ ] , int , int , java . lang . String )
* @see # String ( byte [ ] , int , int , java . nio . charset . Charset )
* @see # String ( byte [ ] , int , int )
* @see # String ( byte [ ] , java . lang . String )
* @see # String ( byte [ ] , java . nio . charset . Charset )
* @see # String ( byte [ ] )
* /
@Deprecated
public String ( byte ascii [ ] , int hibyte ) {
this ( ascii , hibyte , 0 , ascii . length ) ;
}
/ * *
* Constructs a new { @code String } by decoding the specified subarray of
* bytes using the specified charset . The length of the new { @code String }
* is a function of the charset , and hence may not be equal to the length
* of the subarray .
*
* < p > The behavior of this constructor when the given bytes are not valid
* in the given charset is unspecified . The { @link
* java . nio . charset . CharsetDecoder } class should be used when more control
* over the decoding process is required .
*
* @param bytes
* The bytes to be decoded into characters
*
* @param offset
* The index of the first byte to decode
*
* @param length
* The number of bytes to decode
* @param charsetName
* The name of a supported { @linkplain java . nio . charset . Charset
* charset }
*
* @throws UnsupportedEncodingException
* If the named charset is not supported
*
* @throws IndexOutOfBoundsException
2014-12-10 14:11:05 -08:00
* If { @code offset } is negative , { @code length } is negative , or
* { @code offset } is greater than { @code bytes . length - length }
2007-12-01 00:00:00 +00:00
*
2014-06-10 16:18:54 -07:00
* @since 1 . 1
2007-12-01 00:00:00 +00:00
* /
public String ( byte bytes [ ] , int offset , int length , String charsetName )
2012-05-17 10:06:19 -07:00
throws UnsupportedEncodingException {
2007-12-01 00:00:00 +00:00
if ( charsetName = = null )
throw new NullPointerException ( " charsetName " ) ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
checkBoundsOffCount ( offset , length , bytes . length ) ;
StringCoding . Result ret =
StringCoding . decode ( charsetName , bytes , offset , length ) ;
this . value = ret . value ;
this . coder = ret . coder ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Constructs a new { @code String } by decoding the specified subarray of
* bytes using the specified { @linkplain java . nio . charset . Charset charset } .
* The length of the new { @code String } is a function of the charset , and
* hence may not be equal to the length of the subarray .
*
* < p > This method always replaces malformed - input and unmappable - character
* sequences with this charset ' s default replacement string . The { @link
* java . nio . charset . CharsetDecoder } class should be used when more control
* over the decoding process is required .
*
* @param bytes
* The bytes to be decoded into characters
*
* @param offset
* The index of the first byte to decode
*
* @param length
* The number of bytes to decode
*
* @param charset
* The { @linkplain java . nio . charset . Charset charset } to be used to
* decode the { @code bytes }
*
* @throws IndexOutOfBoundsException
2014-12-10 14:11:05 -08:00
* If { @code offset } is negative , { @code length } is negative , or
* { @code offset } is greater than { @code bytes . length - length }
2007-12-01 00:00:00 +00:00
*
* @since 1 . 6
* /
public String ( byte bytes [ ] , int offset , int length , Charset charset ) {
if ( charset = = null )
throw new NullPointerException ( " charset " ) ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
checkBoundsOffCount ( offset , length , bytes . length ) ;
StringCoding . Result ret =
StringCoding . decode ( charset , bytes , offset , length ) ;
this . value = ret . value ;
this . coder = ret . coder ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Constructs a new { @code String } by decoding the specified array of bytes
* using the specified { @linkplain java . nio . charset . Charset charset } . The
* length of the new { @code String } is a function of the charset , and hence
* may not be equal to the length of the byte array .
*
* < p > The behavior of this constructor when the given bytes are not valid
* in the given charset is unspecified . The { @link
* java . nio . charset . CharsetDecoder } class should be used when more control
* over the decoding process is required .
*
* @param bytes
* The bytes to be decoded into characters
*
* @param charsetName
* The name of a supported { @linkplain java . nio . charset . Charset
* charset }
*
* @throws UnsupportedEncodingException
* If the named charset is not supported
*
2014-06-10 16:18:54 -07:00
* @since 1 . 1
2007-12-01 00:00:00 +00:00
* /
public String ( byte bytes [ ] , String charsetName )
2012-05-17 10:06:19 -07:00
throws UnsupportedEncodingException {
2007-12-01 00:00:00 +00:00
this ( bytes , 0 , bytes . length , charsetName ) ;
}
/ * *
* Constructs a new { @code String } by decoding the specified array of
* bytes using the specified { @linkplain java . nio . charset . Charset charset } .
* The length of the new { @code String } is a function of the charset , and
* hence may not be equal to the length of the byte array .
*
* < p > This method always replaces malformed - input and unmappable - character
* sequences with this charset ' s default replacement string . The { @link
* java . nio . charset . CharsetDecoder } class should be used when more control
* over the decoding process is required .
*
* @param bytes
* The bytes to be decoded into characters
*
* @param charset
* The { @linkplain java . nio . charset . Charset charset } to be used to
* decode the { @code bytes }
*
* @since 1 . 6
* /
public String ( byte bytes [ ] , Charset charset ) {
this ( bytes , 0 , bytes . length , charset ) ;
}
/ * *
* Constructs a new { @code String } by decoding the specified subarray of
* bytes using the platform ' s default charset . The length of the new
* { @code String } is a function of the charset , and hence may not be equal
* to the length of the subarray .
*
* < p > The behavior of this constructor when the given bytes are not valid
* in the default charset is unspecified . The { @link
* java . nio . charset . CharsetDecoder } class should be used when more control
* over the decoding process is required .
*
* @param bytes
* The bytes to be decoded into characters
*
* @param offset
* The index of the first byte to decode
*
* @param length
* The number of bytes to decode
*
* @throws IndexOutOfBoundsException
2014-12-10 14:11:05 -08:00
* If { @code offset } is negative , { @code length } is negative , or
* { @code offset } is greater than { @code bytes . length - length }
2007-12-01 00:00:00 +00:00
*
2014-06-10 16:18:54 -07:00
* @since 1 . 1
2007-12-01 00:00:00 +00:00
* /
public String ( byte bytes [ ] , int offset , int length ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
checkBoundsOffCount ( offset , length , bytes . length ) ;
StringCoding . Result ret = StringCoding . decode ( bytes , offset , length ) ;
this . value = ret . value ;
this . coder = ret . coder ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Constructs a new { @code String } by decoding the specified array of bytes
* using the platform ' s default charset . The length of the new { @code
* String } is a function of the charset , and hence may not be equal to the
* length of the byte array .
*
* < p > The behavior of this constructor when the given bytes are not valid
* in the default charset is unspecified . The { @link
* java . nio . charset . CharsetDecoder } class should be used when more control
* over the decoding process is required .
*
* @param bytes
* The bytes to be decoded into characters
*
2014-06-10 16:18:54 -07:00
* @since 1 . 1
2007-12-01 00:00:00 +00:00
* /
2015-05-15 22:10:29 +03:00
public String ( byte [ ] bytes ) {
2007-12-01 00:00:00 +00:00
this ( bytes , 0 , bytes . length ) ;
}
/ * *
* Allocates a new string that contains the sequence of characters
* currently contained in the string buffer argument . The contents of the
* string buffer are copied ; subsequent modification of the string buffer
* does not affect the newly created string .
*
* @param buffer
* A { @code StringBuffer }
* /
public String ( StringBuffer buffer ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
this ( buffer . toString ( ) ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Allocates a new string that contains the sequence of characters
* currently contained in the string builder argument . The contents of the
* string builder are copied ; subsequent modification of the string builder
* does not affect the newly created string .
*
* < p > This constructor is provided to ease migration to { @code
* StringBuilder } . Obtaining a string from a string builder via the { @code
* toString } method is likely to run faster and is generally preferred .
*
* @param builder
* A { @code StringBuilder }
*
* @since 1 . 5
* /
public String ( StringBuilder builder ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
this ( builder , null ) ;
2007-12-01 00:00:00 +00:00
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
/ *
2012-05-17 10:06:19 -07:00
* Package private constructor which shares value array for speed .
* this constructor is always expected to be called with share = = true .
* a separate constructor is needed because we already have a public
* String ( char [ ] ) constructor that makes a copy of the given char [ ] .
* /
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
// TBD: this is kept for package internal use (Thread/System),
// should be removed if they all have a byte[] version
String ( char [ ] val , boolean share ) {
2012-05-17 10:06:19 -07:00
// assert share : "unshared not supported";
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
this ( val , 0 , val . length , null ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns the length of this string .
* The length is equal to the number of < a href = " Character.html#unicode " > Unicode
* code units < / a > in the string .
*
* @return the length of the sequence of characters represented by this
* object .
* /
public int length ( ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return value . length > > coder ( ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2012-12-28 16:56:54 -05:00
* Returns { @code true } if , and only if , { @link # length ( ) } is { @code 0 } .
2007-12-01 00:00:00 +00:00
*
2012-12-28 16:56:54 -05:00
* @return { @code true } if { @link # length ( ) } is { @code 0 } , otherwise
* { @code false }
2007-12-01 00:00:00 +00:00
*
* @since 1 . 6
* /
public boolean isEmpty ( ) {
2012-05-17 10:06:19 -07:00
return value . length = = 0 ;
2007-12-01 00:00:00 +00:00
}
/ * *
2012-01-23 12:17:30 -08:00
* Returns the { @code char } value at the
* specified index . An index ranges from { @code 0 } to
* { @code length ( ) - 1 } . The first { @code char } value of the sequence
* is at index { @code 0 } , the next at index { @code 1 } ,
2007-12-01 00:00:00 +00:00
* and so on , as for array indexing .
*
2012-01-23 12:17:30 -08:00
* < p > If the { @code char } value specified by the index is a
2007-12-01 00:00:00 +00:00
* < a href = " Character.html#unicode " > surrogate < / a > , the surrogate
* value is returned .
*
2012-01-23 12:17:30 -08:00
* @param index the index of the { @code char } value .
* @return the { @code char } value at the specified index of this string .
* The first { @code char } value is at index { @code 0 } .
* @exception IndexOutOfBoundsException if the { @code index }
2007-12-01 00:00:00 +00:00
* argument is negative or not less than the length of this
* string .
* /
public char charAt ( int index ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( isLatin1 ( ) ) {
return StringLatin1 . charAt ( value , index ) ;
} else {
return StringUTF16 . charAt ( value , index ) ;
2007-12-01 00:00:00 +00:00
}
}
/ * *
* Returns the character ( Unicode code point ) at the specified
2012-01-23 12:17:30 -08:00
* index . The index refers to { @code char } values
* ( Unicode code units ) and ranges from { @code 0 } to
* { @link # length ( ) } { @code - 1 } .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* < p > If the { @code char } value specified at the given index
2007-12-01 00:00:00 +00:00
* is in the high - surrogate range , the following index is less
2012-01-23 12:17:30 -08:00
* than the length of this { @code String } , and the
* { @code char } value at the following index is in the
2007-12-01 00:00:00 +00:00
* low - surrogate range , then the supplementary code point
* corresponding to this surrogate pair is returned . Otherwise ,
2012-01-23 12:17:30 -08:00
* the { @code char } value at the given index is returned .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* @param index the index to the { @code char } values
2007-12-01 00:00:00 +00:00
* @return the code point value of the character at the
2012-01-23 12:17:30 -08:00
* { @code index }
* @exception IndexOutOfBoundsException if the { @code index }
2007-12-01 00:00:00 +00:00
* argument is negative or not less than the length of this
* string .
* @since 1 . 5
* /
public int codePointAt ( int index ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( isLatin1 ( ) ) {
checkIndex ( index , value . length ) ;
return value [ index ] & 0xff ;
2007-12-01 00:00:00 +00:00
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int length = value . length > > 1 ;
checkIndex ( index , length ) ;
return StringUTF16 . codePointAt ( value , index , length ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns the character ( Unicode code point ) before the specified
2012-01-23 12:17:30 -08:00
* index . The index refers to { @code char } values
* ( Unicode code units ) and ranges from { @code 1 } to { @link
2007-12-01 00:00:00 +00:00
* CharSequence # length ( ) length } .
*
2012-01-23 12:17:30 -08:00
* < p > If the { @code char } value at { @code ( index - 1 ) }
* is in the low - surrogate range , { @code ( index - 2 ) } is not
* negative , and the { @code char } value at { @code ( index -
* 2 ) } is in the high - surrogate range , then the
2007-12-01 00:00:00 +00:00
* supplementary code point value of the surrogate pair is
2012-01-23 12:17:30 -08:00
* returned . If the { @code char } value at { @code index -
* 1 } is an unpaired low - surrogate or a high - surrogate , the
2007-12-01 00:00:00 +00:00
* surrogate value is returned .
*
* @param index the index following the code point that should be returned
* @return the Unicode code point value before the given index .
2012-01-23 12:17:30 -08:00
* @exception IndexOutOfBoundsException if the { @code index }
2007-12-01 00:00:00 +00:00
* argument is less than 1 or greater than the length
* of this string .
* @since 1 . 5
* /
public int codePointBefore ( int index ) {
int i = index - 1 ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( i < 0 | | i > = length ( ) ) {
2007-12-01 00:00:00 +00:00
throw new StringIndexOutOfBoundsException ( index ) ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( isLatin1 ( ) ) {
return ( value [ i ] & 0xff ) ;
}
return StringUTF16 . codePointBefore ( value , index ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns the number of Unicode code points in the specified text
2012-01-23 12:17:30 -08:00
* range of this { @code String } . The text range begins at the
* specified { @code beginIndex } and extends to the
* { @code char } at index { @code endIndex - 1 } . Thus the
* length ( in { @code char } s ) of the text range is
* { @code endIndex - beginIndex } . Unpaired surrogates within
2007-12-01 00:00:00 +00:00
* the text range count as one code point each .
*
2012-01-23 12:17:30 -08:00
* @param beginIndex the index to the first { @code char } of
2007-12-01 00:00:00 +00:00
* the text range .
2012-01-23 12:17:30 -08:00
* @param endIndex the index after the last { @code char } of
2007-12-01 00:00:00 +00:00
* the text range .
* @return the number of Unicode code points in the specified text
* range
* @exception IndexOutOfBoundsException if the
2012-01-23 12:17:30 -08:00
* { @code beginIndex } is negative , or { @code endIndex }
* is larger than the length of this { @code String } , or
* { @code beginIndex } is larger than { @code endIndex } .
2007-12-01 00:00:00 +00:00
* @since 1 . 5
* /
public int codePointCount ( int beginIndex , int endIndex ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( beginIndex < 0 | | beginIndex > endIndex | |
endIndex > length ( ) ) {
2007-12-01 00:00:00 +00:00
throw new IndexOutOfBoundsException ( ) ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( isLatin1 ( ) ) {
return endIndex - beginIndex ;
}
return StringUTF16 . codePointCount ( value , beginIndex , endIndex ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2012-01-23 12:17:30 -08:00
* Returns the index within this { @code String } that is
* offset from the given { @code index } by
* { @code codePointOffset } code points . Unpaired surrogates
* within the text range given by { @code index } and
* { @code codePointOffset } count as one code point each .
2007-12-01 00:00:00 +00:00
*
* @param index the index to be offset
* @param codePointOffset the offset in code points
2012-01-23 12:17:30 -08:00
* @return the index within this { @code String }
* @exception IndexOutOfBoundsException if { @code index }
2007-12-01 00:00:00 +00:00
* is negative or larger then the length of this
2012-01-23 12:17:30 -08:00
* { @code String } , or if { @code codePointOffset } is positive
* and the substring starting with { @code index } has fewer
* than { @code codePointOffset } code points ,
* or if { @code codePointOffset } is negative and the substring
* before { @code index } has fewer than the absolute value
* of { @code codePointOffset } code points .
2007-12-01 00:00:00 +00:00
* @since 1 . 5
* /
public int offsetByCodePoints ( int index , int codePointOffset ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( index < 0 | | index > length ( ) ) {
2007-12-01 00:00:00 +00:00
throw new IndexOutOfBoundsException ( ) ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return Character . offsetByCodePoints ( this , index , codePointOffset ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Copies characters from this string into the destination character
* array .
* < p >
2012-01-23 12:17:30 -08:00
* The first character to be copied is at index { @code srcBegin } ;
* the last character to be copied is at index { @code srcEnd - 1 }
2007-12-01 00:00:00 +00:00
* ( thus the total number of characters to be copied is
2012-01-23 12:17:30 -08:00
* { @code srcEnd - srcBegin } ) . The characters are copied into the
* subarray of { @code dst } starting at index { @code dstBegin }
2007-12-01 00:00:00 +00:00
* and ending at index :
2013-10-22 17:02:08 -04:00
* < blockquote > < pre >
2015-01-14 21:35:52 +03:00
* dstBegin + ( srcEnd - srcBegin ) - 1
2007-12-01 00:00:00 +00:00
* < / pre > < / blockquote >
*
* @param srcBegin index of the first character in the string
* to copy .
* @param srcEnd index after the last character in the string
* to copy .
* @param dst the destination array .
* @param dstBegin the start offset in the destination array .
* @exception IndexOutOfBoundsException If any of the following
* is true :
2012-01-23 12:17:30 -08:00
* < ul > < li > { @code srcBegin } is negative .
* < li > { @code srcBegin } is greater than { @code srcEnd }
* < li > { @code srcEnd } is greater than the length of this
2007-12-01 00:00:00 +00:00
* string
2012-01-23 12:17:30 -08:00
* < li > { @code dstBegin } is negative
* < li > { @code dstBegin + ( srcEnd - srcBegin ) } is larger than
* { @code dst . length } < / ul >
2007-12-01 00:00:00 +00:00
* /
public void getChars ( int srcBegin , int srcEnd , char dst [ ] , int dstBegin ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
checkBoundsBeginEnd ( srcBegin , srcEnd , length ( ) ) ;
checkBoundsOffCount ( dstBegin , srcEnd - srcBegin , dst . length ) ;
if ( isLatin1 ( ) ) {
StringLatin1 . getChars ( value , srcBegin , srcEnd , dst , dstBegin ) ;
} else {
StringUTF16 . getChars ( value , srcBegin , srcEnd , dst , dstBegin ) ;
2007-12-01 00:00:00 +00:00
}
}
/ * *
* Copies characters from this string into the destination byte array . Each
* byte receives the 8 low - order bits of the corresponding character . The
* eight high - order bits of each character are not copied and do not
* participate in the transfer in any way .
*
* < p > The first character to be copied is at index { @code srcBegin } ; the
* last character to be copied is at index { @code srcEnd - 1 } . The total
* number of characters to be copied is { @code srcEnd - srcBegin } . The
* characters , converted to bytes , are copied into the subarray of { @code
* dst } starting at index { @code dstBegin } and ending at index :
*
* < blockquote > < pre >
2015-01-14 21:35:52 +03:00
* dstBegin + ( srcEnd - srcBegin ) - 1
2007-12-01 00:00:00 +00:00
* < / pre > < / blockquote >
*
* @deprecated This method does not properly convert characters into
* bytes . As of JDK & nbsp ; 1 . 1 , the preferred way to do this is via the
* { @link # getBytes ( ) } method , which uses the platform ' s default charset .
*
* @param srcBegin
* Index of the first character in the string to copy
*
* @param srcEnd
* Index after the last character in the string to copy
*
* @param dst
* The destination array
*
* @param dstBegin
* The start offset in the destination array
*
* @throws IndexOutOfBoundsException
* If any of the following is true :
* < ul >
* < li > { @code srcBegin } is negative
* < li > { @code srcBegin } is greater than { @code srcEnd }
* < li > { @code srcEnd } is greater than the length of this String
* < li > { @code dstBegin } is negative
* < li > { @code dstBegin + ( srcEnd - srcBegin ) } is larger than { @code
* dst . length }
* < / ul >
* /
@Deprecated
public void getBytes ( int srcBegin , int srcEnd , byte dst [ ] , int dstBegin ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
checkBoundsBeginEnd ( srcBegin , srcEnd , length ( ) ) ;
2013-01-22 11:14:13 -05:00
Objects . requireNonNull ( dst ) ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
checkBoundsOffCount ( dstBegin , srcEnd - srcBegin , dst . length ) ;
if ( isLatin1 ( ) ) {
StringLatin1 . getBytes ( value , srcBegin , srcEnd , dst , dstBegin ) ;
} else {
StringUTF16 . getBytes ( value , srcBegin , srcEnd , dst , dstBegin ) ;
2007-12-01 00:00:00 +00:00
}
}
/ * *
* Encodes this { @code String } into a sequence of bytes using the named
* charset , storing the result into a new byte array .
*
* < p > The behavior of this method when this string cannot be encoded in
* the given charset is unspecified . The { @link
* java . nio . charset . CharsetEncoder } class should be used when more control
* over the encoding process is required .
*
* @param charsetName
* The name of a supported { @linkplain java . nio . charset . Charset
* charset }
*
* @return The resultant byte array
*
* @throws UnsupportedEncodingException
* If the named charset is not supported
*
2014-06-10 16:18:54 -07:00
* @since 1 . 1
2007-12-01 00:00:00 +00:00
* /
public byte [ ] getBytes ( String charsetName )
2012-05-17 10:06:19 -07:00
throws UnsupportedEncodingException {
2007-12-01 00:00:00 +00:00
if ( charsetName = = null ) throw new NullPointerException ( ) ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return StringCoding . encode ( charsetName , coder ( ) , value ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Encodes this { @code String } into a sequence of bytes using the given
* { @linkplain java . nio . charset . Charset charset } , storing the result into a
* new byte array .
*
* < p > This method always replaces malformed - input and unmappable - character
* sequences with this charset ' s default replacement byte array . The
* { @link java . nio . charset . CharsetEncoder } class should be used when more
* control over the encoding process is required .
*
* @param charset
* The { @linkplain java . nio . charset . Charset } to be used to encode
* the { @code String }
*
* @return The resultant byte array
*
* @since 1 . 6
* /
public byte [ ] getBytes ( Charset charset ) {
if ( charset = = null ) throw new NullPointerException ( ) ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return StringCoding . encode ( charset , coder ( ) , value ) ;
}
2007-12-01 00:00:00 +00:00
/ * *
* Encodes this { @code String } into a sequence of bytes using the
* platform ' s default charset , storing the result into a new byte array .
*
* < p > The behavior of this method when this string cannot be encoded in
* the default charset is unspecified . The { @link
* java . nio . charset . CharsetEncoder } class should be used when more control
* over the encoding process is required .
*
* @return The resultant byte array
*
2014-06-10 16:18:54 -07:00
* @since 1 . 1
2007-12-01 00:00:00 +00:00
* /
public byte [ ] getBytes ( ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return StringCoding . encode ( coder ( ) , value ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Compares this string to the specified object . The result is { @code
* true } if and only if the argument is not { @code null } and is a { @code
* String } object that represents the same sequence of characters as this
* object .
*
2015-10-27 09:20:24 -07:00
* < p > For finer - grained String comparison , refer to
* { @link java . text . Collator } .
*
2007-12-01 00:00:00 +00:00
* @param anObject
* The object to compare this { @code String } against
*
* @return { @code true } if the given object represents a { @code String }
* equivalent to this string , { @code false } otherwise
*
* @see # compareTo ( String )
* @see # equalsIgnoreCase ( String )
* /
public boolean equals ( Object anObject ) {
if ( this = = anObject ) {
return true ;
}
if ( anObject instanceof String ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
String aString = ( String ) anObject ;
if ( coder ( ) = = aString . coder ( ) ) {
return isLatin1 ( ) ? StringLatin1 . equals ( value , aString . value )
: StringUTF16 . equals ( value , aString . value ) ;
2007-12-01 00:00:00 +00:00
}
}
return false ;
}
/ * *
* Compares this string to the specified { @code StringBuffer } . The result
* is { @code true } if and only if this { @code String } represents the same
2012-07-27 16:17:11 -04:00
* sequence of characters as the specified { @code StringBuffer } . This method
* synchronizes on the { @code StringBuffer } .
2007-12-01 00:00:00 +00:00
*
2015-10-27 09:20:24 -07:00
* < p > For finer - grained String comparison , refer to
* { @link java . text . Collator } .
*
2007-12-01 00:00:00 +00:00
* @param sb
* The { @code StringBuffer } to compare this { @code String } against
*
* @return { @code true } if this { @code String } represents the same
* sequence of characters as the specified { @code StringBuffer } ,
* { @code false } otherwise
*
* @since 1 . 4
* /
public boolean contentEquals ( StringBuffer sb ) {
2013-04-02 18:41:04 -04:00
return contentEquals ( ( CharSequence ) sb ) ;
2012-07-27 16:17:11 -04:00
}
private boolean nonSyncContentEquals ( AbstractStringBuilder sb ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int len = length ( ) ;
if ( len ! = sb . length ( ) ) {
2013-05-17 14:41:39 +02:00
return false ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
byte v1 [ ] = value ;
byte v2 [ ] = sb . getValue ( ) ;
if ( coder ( ) = = sb . getCoder ( ) ) {
int n = v1 . length ;
for ( int i = 0 ; i < n ; i + + ) {
if ( v1 [ i ] ! = v2 [ i ] ) {
return false ;
}
}
} else {
if ( ! isLatin1 ( ) ) { // utf16 str and latin1 abs can never be "equal"
2012-07-27 16:17:11 -04:00
return false ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
for ( int i = 0 ; i < len ; i + + ) {
if ( ( char ) ( v1 [ i ] & 0xff ) ! = StringUTF16 . getChar ( v2 , i ) ) {
return false ;
}
}
2007-12-01 00:00:00 +00:00
}
2012-07-27 16:17:11 -04:00
return true ;
2007-12-01 00:00:00 +00:00
}
/ * *
2012-07-27 16:17:11 -04:00
* Compares this string to the specified { @code CharSequence } . The
* result is { @code true } if and only if this { @code String } represents the
* same sequence of char values as the specified sequence . Note that if the
* { @code CharSequence } is a { @code StringBuffer } then the method
* synchronizes on it .
2007-12-01 00:00:00 +00:00
*
2015-10-27 09:20:24 -07:00
* < p > For finer - grained String comparison , refer to
* { @link java . text . Collator } .
*
2007-12-01 00:00:00 +00:00
* @param cs
* The sequence to compare this { @code String } against
*
* @return { @code true } if this { @code String } represents the same
* sequence of char values as the specified sequence , { @code
* false } otherwise
*
* @since 1 . 5
* /
public boolean contentEquals ( CharSequence cs ) {
// Argument is a StringBuffer, StringBuilder
if ( cs instanceof AbstractStringBuilder ) {
2012-07-27 16:17:11 -04:00
if ( cs instanceof StringBuffer ) {
synchronized ( cs ) {
return nonSyncContentEquals ( ( AbstractStringBuilder ) cs ) ;
}
} else {
return nonSyncContentEquals ( ( AbstractStringBuilder ) cs ) ;
2007-12-01 00:00:00 +00:00
}
}
// Argument is a String
2014-10-14 19:35:03 +02:00
if ( cs instanceof String ) {
return equals ( cs ) ;
}
2007-12-01 00:00:00 +00:00
// Argument is a generic CharSequence
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int n = cs . length ( ) ;
if ( n ! = length ( ) ) {
2013-05-17 14:41:39 +02:00
return false ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
byte [ ] val = this . value ;
if ( isLatin1 ( ) ) {
for ( int i = 0 ; i < n ; i + + ) {
if ( ( val [ i ] & 0xff ) ! = cs . charAt ( i ) ) {
return false ;
}
}
} else {
for ( int i = 0 ; i < n ; i + + ) {
if ( StringUTF16 . getChar ( val , i ) ! = cs . charAt ( i ) ) {
return false ;
}
2013-05-17 14:41:39 +02:00
}
2007-12-01 00:00:00 +00:00
}
return true ;
}
/ * *
* Compares this { @code String } to another { @code String } , ignoring case
* considerations . Two strings are considered equal ignoring case if they
* are of the same length and corresponding characters in the two strings
* are equal ignoring case .
*
* < p > Two characters { @code c1 } and { @code c2 } are considered the same
* ignoring case if at least one of the following is true :
* < ul >
* < li > The two characters are the same ( as compared by the
* { @code = = } operator )
2015-10-27 09:20:24 -07:00
* < li > Calling { @code Character . toLowerCase ( Character . toUpperCase ( char ) ) }
* on each character produces the same result
2007-12-01 00:00:00 +00:00
* < / ul >
*
2015-10-27 09:20:24 -07:00
* < p > Note that this method does < em > not < / em > take locale into account , and
* will result in unsatisfactory results for certain locales . The
* { @link java . text . Collator } class provides locale - sensitive comparison .
*
2007-12-01 00:00:00 +00:00
* @param anotherString
* The { @code String } to compare this { @code String } against
*
* @return { @code true } if the argument is not { @code null } and it
* represents an equivalent { @code String } ignoring case ; { @code
* false } otherwise
*
* @see # equals ( Object )
* /
public boolean equalsIgnoreCase ( String anotherString ) {
2012-05-17 10:06:19 -07:00
return ( this = = anotherString ) ? true
: ( anotherString ! = null )
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
& & ( anotherString . length ( ) = = length ( ) )
& & regionMatches ( true , 0 , anotherString , 0 , length ( ) ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Compares two strings lexicographically .
* The comparison is based on the Unicode value of each character in
* the strings . The character sequence represented by this
2012-01-23 12:17:30 -08:00
* { @code String } object is compared lexicographically to the
2007-12-01 00:00:00 +00:00
* character sequence represented by the argument string . The result is
2012-01-23 12:17:30 -08:00
* a negative integer if this { @code String } object
2007-12-01 00:00:00 +00:00
* lexicographically precedes the argument string . The result is a
2012-01-23 12:17:30 -08:00
* positive integer if this { @code String } object lexicographically
2007-12-01 00:00:00 +00:00
* follows the argument string . The result is zero if the strings
2012-01-23 12:17:30 -08:00
* are equal ; { @code compareTo } returns { @code 0 } exactly when
* the { @link # equals ( Object ) } method would return { @code true } .
2007-12-01 00:00:00 +00:00
* < p >
* This is the definition of lexicographic ordering . If two strings are
* different , then either they have different characters at some index
* that is a valid index for both strings , or their lengths are different ,
* or both . If they have different characters at one or more index
* positions , let < i > k < / i > be the smallest such index ; then the string
* whose character at position < i > k < / i > has the smaller value , as
2015-08-06 13:20:13 +03:00
* determined by using the { @code < } operator , lexicographically precedes the
2012-01-23 12:17:30 -08:00
* other string . In this case , { @code compareTo } returns the
* difference of the two character values at position { @code k } in
2007-12-01 00:00:00 +00:00
* the two string - - that is , the value :
* < blockquote > < pre >
* this . charAt ( k ) - anotherString . charAt ( k )
* < / pre > < / blockquote >
* If there is no index position at which they differ , then the shorter
* string lexicographically precedes the longer string . In this case ,
2012-01-23 12:17:30 -08:00
* { @code compareTo } returns the difference of the lengths of the
2007-12-01 00:00:00 +00:00
* strings - - that is , the value :
* < blockquote > < pre >
* this . length ( ) - anotherString . length ( )
* < / pre > < / blockquote >
*
2015-10-27 09:20:24 -07:00
* < p > For finer - grained String comparison , refer to
* { @link java . text . Collator } .
*
2012-01-23 12:17:30 -08:00
* @param anotherString the { @code String } to be compared .
* @return the value { @code 0 } if the argument string is equal to
* this string ; a value less than { @code 0 } if this string
2007-12-01 00:00:00 +00:00
* is lexicographically less than the string argument ; and a
2012-01-23 12:17:30 -08:00
* value greater than { @code 0 } if this string is
2007-12-01 00:00:00 +00:00
* lexicographically greater than the string argument .
* /
public int compareTo ( String anotherString ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
byte v1 [ ] = value ;
byte v2 [ ] = anotherString . value ;
if ( coder ( ) = = anotherString . coder ( ) ) {
return isLatin1 ( ) ? StringLatin1 . compareTo ( v1 , v2 )
: StringUTF16 . compareTo ( v1 , v2 ) ;
2007-12-01 00:00:00 +00:00
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return isLatin1 ( ) ? StringLatin1 . compareToUTF16 ( v1 , v2 )
: StringUTF16 . compareToLatin1 ( v1 , v2 ) ;
}
2007-12-01 00:00:00 +00:00
/ * *
2012-01-23 12:17:30 -08:00
* A Comparator that orders { @code String } objects as by
* { @code compareToIgnoreCase } . This comparator is serializable .
2007-12-01 00:00:00 +00:00
* < p >
* Note that this Comparator does < em > not < / em > take locale into account ,
* and will result in an unsatisfactory ordering for certain locales .
2015-10-27 09:20:24 -07:00
* The { @link java . text . Collator } class provides locale - sensitive comparison .
2007-12-01 00:00:00 +00:00
*
2015-10-27 09:20:24 -07:00
* @see java . text . Collator
2007-12-01 00:00:00 +00:00
* @since 1 . 2
* /
public static final Comparator < String > CASE_INSENSITIVE_ORDER
= new CaseInsensitiveComparator ( ) ;
private static class CaseInsensitiveComparator
2012-05-17 10:06:19 -07:00
implements Comparator < String > , java . io . Serializable {
2007-12-01 00:00:00 +00:00
// use serialVersionUID from JDK 1.2.2 for interoperability
private static final long serialVersionUID = 8575799808933029326L ;
public int compare ( String s1 , String s2 ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
byte v1 [ ] = s1 . value ;
byte v2 [ ] = s2 . value ;
2007-12-01 00:00:00 +00:00
int n1 = s1 . length ( ) ;
int n2 = s2 . length ( ) ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
boolean s1IsLatin1 = s1 . isLatin1 ( ) ;
boolean s2IsLatin1 = s2 . isLatin1 ( ) ;
2007-12-01 00:00:00 +00:00
int min = Math . min ( n1 , n2 ) ;
for ( int i = 0 ; i < min ; i + + ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
char c1 = s1IsLatin1 ? StringLatin1 . getChar ( v1 , i )
: StringUTF16 . getChar ( v1 , i ) ;
char c2 = s2IsLatin1 ? StringLatin1 . getChar ( v2 , i )
: StringUTF16 . getChar ( v2 , i ) ;
2007-12-01 00:00:00 +00:00
if ( c1 ! = c2 ) {
c1 = Character . toUpperCase ( c1 ) ;
c2 = Character . toUpperCase ( c2 ) ;
if ( c1 ! = c2 ) {
c1 = Character . toLowerCase ( c1 ) ;
c2 = Character . toLowerCase ( c2 ) ;
if ( c1 ! = c2 ) {
// No overflow because of numeric promotion
return c1 - c2 ;
}
}
}
}
return n1 - n2 ;
}
2011-12-02 16:25:35 -08:00
/** Replaces the de-serialized object. */
private Object readResolve ( ) { return CASE_INSENSITIVE_ORDER ; }
2007-12-01 00:00:00 +00:00
}
/ * *
* Compares two strings lexicographically , ignoring case
* differences . This method returns an integer whose sign is that of
2012-01-23 12:17:30 -08:00
* calling { @code compareTo } with normalized versions of the strings
2007-12-01 00:00:00 +00:00
* where case differences have been eliminated by calling
2012-01-23 12:17:30 -08:00
* { @code Character . toLowerCase ( Character . toUpperCase ( character ) ) } on
2007-12-01 00:00:00 +00:00
* each character .
* < p >
* Note that this method does < em > not < / em > take locale into account ,
* and will result in an unsatisfactory ordering for certain locales .
2015-10-27 09:20:24 -07:00
* The { @link java . text . Collator } class provides locale - sensitive comparison .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* @param str the { @code String } to be compared .
2007-12-01 00:00:00 +00:00
* @return a negative integer , zero , or a positive integer as the
* specified String is greater than , equal to , or less
* than this String , ignoring case considerations .
2015-10-27 09:20:24 -07:00
* @see java . text . Collator
2007-12-01 00:00:00 +00:00
* @since 1 . 2
* /
public int compareToIgnoreCase ( String str ) {
return CASE_INSENSITIVE_ORDER . compare ( this , str ) ;
}
/ * *
* Tests if two string regions are equal .
* < p >
2012-12-28 16:56:54 -05:00
* A substring of this { @code String } object is compared to a substring
2007-12-01 00:00:00 +00:00
* of the argument other . The result is true if these substrings
* represent identical character sequences . The substring of this
2012-12-28 16:56:54 -05:00
* { @code String } object to be compared begins at index { @code toffset }
* and has length { @code len } . The substring of other to be compared
* begins at index { @code ooffset } and has length { @code len } . The
* result is { @code false } if and only if at least one of the following
2007-12-01 00:00:00 +00:00
* is true :
2012-12-28 16:56:54 -05:00
* < ul > < li > { @code toffset } is negative .
* < li > { @code ooffset } is negative .
* < li > { @code toffset + len } is greater than the length of this
* { @code String } object .
* < li > { @code ooffset + len } is greater than the length of the other
2007-12-01 00:00:00 +00:00
* argument .
2012-12-28 16:56:54 -05:00
* < li > There is some nonnegative integer < i > k < / i > less than { @code len }
2007-12-01 00:00:00 +00:00
* such that :
2013-04-02 18:41:04 -04:00
* { @code this . charAt ( toffset + } < i > k < / i > { @code ) ! = other . charAt ( ooffset + }
* < i > k < / i > { @code ) }
2007-12-01 00:00:00 +00:00
* < / ul >
*
2015-10-27 09:20:24 -07:00
* < p > Note that this method does < em > not < / em > take locale into account . The
* { @link java . text . Collator } class provides locale - sensitive comparison .
*
2007-12-01 00:00:00 +00:00
* @param toffset the starting offset of the subregion in this string .
* @param other the string argument .
* @param ooffset the starting offset of the subregion in the string
* argument .
* @param len the number of characters to compare .
2012-01-23 12:17:30 -08:00
* @return { @code true } if the specified subregion of this string
2007-12-01 00:00:00 +00:00
* exactly matches the specified subregion of the string argument ;
2012-01-23 12:17:30 -08:00
* { @code false } otherwise .
2007-12-01 00:00:00 +00:00
* /
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
public boolean regionMatches ( int toffset , String other , int ooffset , int len ) {
byte tv [ ] = value ;
byte ov [ ] = other . value ;
2007-12-01 00:00:00 +00:00
// Note: toffset, ooffset, or len might be near -1>>>1.
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( ( ooffset < 0 ) | | ( toffset < 0 ) | |
( toffset > ( long ) length ( ) - len ) | |
( ooffset > ( long ) other . length ( ) - len ) ) {
2007-12-01 00:00:00 +00:00
return false ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( coder ( ) = = other . coder ( ) ) {
if ( ! isLatin1 ( ) & & ( len > 0 ) ) {
toffset = toffset < < 1 ;
ooffset = ooffset < < 1 ;
len = len < < 1 ;
}
while ( len - - > 0 ) {
if ( tv [ toffset + + ] ! = ov [ ooffset + + ] ) {
return false ;
}
}
} else {
if ( coder ( ) = = LATIN1 ) {
while ( len - - > 0 ) {
if ( StringLatin1 . getChar ( tv , toffset + + ) ! =
StringUTF16 . getChar ( ov , ooffset + + ) ) {
return false ;
}
}
} else {
while ( len - - > 0 ) {
if ( StringUTF16 . getChar ( tv , toffset + + ) ! =
StringLatin1 . getChar ( ov , ooffset + + ) ) {
return false ;
}
}
2007-12-01 00:00:00 +00:00
}
}
return true ;
}
/ * *
* Tests if two string regions are equal .
* < p >
2012-12-28 16:56:54 -05:00
* A substring of this { @code String } object is compared to a substring
* of the argument { @code other } . The result is { @code true } if these
2007-12-01 00:00:00 +00:00
* substrings represent character sequences that are the same , ignoring
2012-12-28 16:56:54 -05:00
* case if and only if { @code ignoreCase } is true . The substring of
* this { @code String } object to be compared begins at index
* { @code toffset } and has length { @code len } . The substring of
* { @code other } to be compared begins at index { @code ooffset } and
* has length { @code len } . The result is { @code false } if and only if
2007-12-01 00:00:00 +00:00
* at least one of the following is true :
2012-12-28 16:56:54 -05:00
* < ul > < li > { @code toffset } is negative .
* < li > { @code ooffset } is negative .
* < li > { @code toffset + len } is greater than the length of this
* { @code String } object .
* < li > { @code ooffset + len } is greater than the length of the other
2007-12-01 00:00:00 +00:00
* argument .
2012-12-28 16:56:54 -05:00
* < li > { @code ignoreCase } is { @code false } and there is some nonnegative
* integer < i > k < / i > less than { @code len } such that :
2007-12-01 00:00:00 +00:00
* < blockquote > < pre >
* this . charAt ( toffset + k ) ! = other . charAt ( ooffset + k )
* < / pre > < / blockquote >
2012-12-28 16:56:54 -05:00
* < li > { @code ignoreCase } is { @code true } and there is some nonnegative
* integer < i > k < / i > less than { @code len } such that :
2007-12-01 00:00:00 +00:00
* < blockquote > < pre >
2015-10-27 09:20:24 -07:00
* Character . toLowerCase ( Character . toUpperCase ( this . charAt ( toffset + k ) ) ) ! =
Character . toLowerCase ( Character . toUpperCase ( other . charAt ( ooffset + k ) ) )
2007-12-01 00:00:00 +00:00
* < / pre > < / blockquote >
* < / ul >
*
2015-10-27 09:20:24 -07:00
* < p > Note that this method does < em > not < / em > take locale into account ,
* and will result in unsatisfactory results for certain locales when
* { @code ignoreCase } is { @code true } . The { @link java . text . Collator } class
* provides locale - sensitive comparison .
*
2012-01-23 12:17:30 -08:00
* @param ignoreCase if { @code true } , ignore case when comparing
2007-12-01 00:00:00 +00:00
* characters .
* @param toffset the starting offset of the subregion in this
* string .
* @param other the string argument .
* @param ooffset the starting offset of the subregion in the string
* argument .
* @param len the number of characters to compare .
2012-01-23 12:17:30 -08:00
* @return { @code true } if the specified subregion of this string
2007-12-01 00:00:00 +00:00
* matches the specified subregion of the string argument ;
2012-01-23 12:17:30 -08:00
* { @code false } otherwise . Whether the matching is exact
* or case insensitive depends on the { @code ignoreCase }
2007-12-01 00:00:00 +00:00
* argument .
* /
public boolean regionMatches ( boolean ignoreCase , int toffset ,
2012-05-17 10:06:19 -07:00
String other , int ooffset , int len ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( ! ignoreCase ) {
return regionMatches ( toffset , other , ooffset , len ) ;
}
2007-12-01 00:00:00 +00:00
// Note: toffset, ooffset, or len might be near -1>>>1.
2012-05-17 10:06:19 -07:00
if ( ( ooffset < 0 ) | | ( toffset < 0 )
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
| | ( toffset > ( long ) length ( ) - len )
| | ( ooffset > ( long ) other . length ( ) - len ) ) {
2007-12-01 00:00:00 +00:00
return false ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
byte tv [ ] = value ;
byte ov [ ] = other . value ;
if ( coder ( ) = = other . coder ( ) ) {
return isLatin1 ( )
? StringLatin1 . regionMatchesCI ( tv , toffset , ov , ooffset , len )
: StringUTF16 . regionMatchesCI ( tv , toffset , ov , ooffset , len ) ;
2007-12-01 00:00:00 +00:00
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return isLatin1 ( )
? StringLatin1 . regionMatchesCI_UTF16 ( tv , toffset , ov , ooffset , len )
: StringUTF16 . regionMatchesCI_Latin1 ( tv , toffset , ov , ooffset , len ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Tests if the substring of this string beginning at the
* specified index starts with the specified prefix .
*
* @param prefix the prefix .
* @param toffset where to begin looking in this string .
2012-01-23 12:17:30 -08:00
* @return { @code true } if the character sequence represented by the
2007-12-01 00:00:00 +00:00
* argument is a prefix of the substring of this object starting
2012-01-23 12:17:30 -08:00
* at index { @code toffset } ; { @code false } otherwise .
* The result is { @code false } if { @code toffset } is
2007-12-01 00:00:00 +00:00
* negative or greater than the length of this
2012-01-23 12:17:30 -08:00
* { @code String } object ; otherwise the result is the same
2007-12-01 00:00:00 +00:00
* as the result of the expression
* < pre >
* this . substring ( toffset ) . startsWith ( prefix )
* < / pre >
* /
public boolean startsWith ( String prefix , int toffset ) {
// Note: toffset might be near -1>>>1.
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( toffset < 0 | | toffset > length ( ) - prefix . length ( ) ) {
2007-12-01 00:00:00 +00:00
return false ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
byte ta [ ] = value ;
byte pa [ ] = prefix . value ;
int po = 0 ;
int pc = pa . length ;
if ( coder ( ) = = prefix . coder ( ) ) {
int to = isLatin1 ( ) ? toffset : toffset < < 1 ;
while ( po < pc ) {
if ( ta [ to + + ] ! = pa [ po + + ] ) {
return false ;
}
}
} else {
if ( isLatin1 ( ) ) { // && pcoder == UTF16
2007-12-01 00:00:00 +00:00
return false ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
// coder == UTF16 && pcoder == LATIN1)
while ( po < pc ) {
if ( StringUTF16 . getChar ( ta , toffset + + ) ! = ( pa [ po + + ] & 0xff ) ) {
return false ;
}
}
2007-12-01 00:00:00 +00:00
}
return true ;
}
/ * *
* Tests if this string starts with the specified prefix .
*
* @param prefix the prefix .
2012-01-23 12:17:30 -08:00
* @return { @code true } if the character sequence represented by the
2007-12-01 00:00:00 +00:00
* argument is a prefix of the character sequence represented by
2012-01-23 12:17:30 -08:00
* this string ; { @code false } otherwise .
* Note also that { @code true } will be returned if the
2007-12-01 00:00:00 +00:00
* argument is an empty string or is equal to this
2012-01-23 12:17:30 -08:00
* { @code String } object as determined by the
2007-12-01 00:00:00 +00:00
* { @link # equals ( Object ) } method .
2014-06-10 16:18:54 -07:00
* @since 1 . 0
2007-12-01 00:00:00 +00:00
* /
public boolean startsWith ( String prefix ) {
return startsWith ( prefix , 0 ) ;
}
/ * *
* Tests if this string ends with the specified suffix .
*
* @param suffix the suffix .
2012-01-23 12:17:30 -08:00
* @return { @code true } if the character sequence represented by the
2007-12-01 00:00:00 +00:00
* argument is a suffix of the character sequence represented by
2012-01-23 12:17:30 -08:00
* this object ; { @code false } otherwise . Note that the
* result will be { @code true } if the argument is the
* empty string or is equal to this { @code String } object
2007-12-01 00:00:00 +00:00
* as determined by the { @link # equals ( Object ) } method .
* /
public boolean endsWith ( String suffix ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return startsWith ( suffix , length ( ) - suffix . length ( ) ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns a hash code for this string . The hash code for a
2012-01-23 12:17:30 -08:00
* { @code String } object is computed as
2007-12-01 00:00:00 +00:00
* < blockquote > < pre >
* s [ 0 ] * 31 ^ ( n - 1 ) + s [ 1 ] * 31 ^ ( n - 2 ) + . . . + s [ n - 1 ]
* < / pre > < / blockquote >
2012-01-23 12:17:30 -08:00
* using { @code int } arithmetic , where { @code s [ i ] } is the
* < i > i < / i > th character of the string , { @code n } is the length of
* the string , and { @code ^ } indicates exponentiation .
2007-12-01 00:00:00 +00:00
* ( The hash value of the empty string is zero . )
*
* @return a hash code value for this object .
* /
public int hashCode ( ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( hash = = 0 & & value . length > 0 ) {
hash = isLatin1 ( ) ? StringLatin1 . hashCode ( value )
: StringUTF16 . hashCode ( value ) ;
2007-12-01 00:00:00 +00:00
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return hash ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns the index within this string of the first occurrence of
* the specified character . If a character with value
2012-01-23 12:17:30 -08:00
* { @code ch } occurs in the character sequence represented by
* this { @code String } object , then the index ( in Unicode
2007-12-01 00:00:00 +00:00
* code units ) of the first such occurrence is returned . For
2012-01-23 12:17:30 -08:00
* values of { @code ch } in the range from 0 to 0xFFFF
2007-12-01 00:00:00 +00:00
* ( inclusive ) , this is the smallest value < i > k < / i > such that :
* < blockquote > < pre >
* this . charAt ( < i > k < / i > ) = = ch
* < / pre > < / blockquote >
2012-01-23 12:17:30 -08:00
* is true . For other values of { @code ch } , it is the
2007-12-01 00:00:00 +00:00
* smallest value < i > k < / i > such that :
* < blockquote > < pre >
* this . codePointAt ( < i > k < / i > ) = = ch
* < / pre > < / blockquote >
* is true . In either case , if no such character occurs in this
2012-01-23 12:17:30 -08:00
* string , then { @code - 1 } is returned .
2007-12-01 00:00:00 +00:00
*
* @param ch a character ( Unicode code point ) .
* @return the index of the first occurrence of the character in the
* character sequence represented by this object , or
2012-01-23 12:17:30 -08:00
* { @code - 1 } if the character does not occur .
2007-12-01 00:00:00 +00:00
* /
public int indexOf ( int ch ) {
return indexOf ( ch , 0 ) ;
}
/ * *
* Returns the index within this string of the first occurrence of the
* specified character , starting the search at the specified index .
* < p >
2012-01-23 12:17:30 -08:00
* If a character with value { @code ch } occurs in the
* character sequence represented by this { @code String }
* object at an index no smaller than { @code fromIndex } , then
2007-12-01 00:00:00 +00:00
* the index of the first such occurrence is returned . For values
2012-01-23 12:17:30 -08:00
* of { @code ch } in the range from 0 to 0xFFFF ( inclusive ) ,
2007-12-01 00:00:00 +00:00
* this is the smallest value < i > k < / i > such that :
* < blockquote > < pre >
2012-12-28 16:56:54 -05:00
* ( this . charAt ( < i > k < / i > ) = = ch ) { @code & & } ( < i > k < / i > & gt ; = fromIndex )
2007-12-01 00:00:00 +00:00
* < / pre > < / blockquote >
2012-01-23 12:17:30 -08:00
* is true . For other values of { @code ch } , it is the
2007-12-01 00:00:00 +00:00
* smallest value < i > k < / i > such that :
* < blockquote > < pre >
2012-12-28 16:56:54 -05:00
* ( this . codePointAt ( < i > k < / i > ) = = ch ) { @code & & } ( < i > k < / i > & gt ; = fromIndex )
2007-12-01 00:00:00 +00:00
* < / pre > < / blockquote >
* is true . In either case , if no such character occurs in this
2012-01-23 12:17:30 -08:00
* string at or after position { @code fromIndex } , then
* { @code - 1 } is returned .
2007-12-01 00:00:00 +00:00
*
* < p >
2012-01-23 12:17:30 -08:00
* There is no restriction on the value of { @code fromIndex } . If it
2007-12-01 00:00:00 +00:00
* is negative , it has the same effect as if it were zero : this entire
* string may be searched . If it is greater than the length of this
* string , it has the same effect as if it were equal to the length of
2012-01-23 12:17:30 -08:00
* this string : { @code - 1 } is returned .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* < p > All indices are specified in { @code char } values
2007-12-01 00:00:00 +00:00
* ( Unicode code units ) .
*
* @param ch a character ( Unicode code point ) .
* @param fromIndex the index to start the search from .
* @return the index of the first occurrence of the character in the
* character sequence represented by this object that is greater
2012-01-23 12:17:30 -08:00
* than or equal to { @code fromIndex } , or { @code - 1 }
2007-12-01 00:00:00 +00:00
* if the character does not occur .
* /
public int indexOf ( int ch , int fromIndex ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return isLatin1 ( ) ? StringLatin1 . indexOf ( value , ch , fromIndex )
: StringUTF16 . indexOf ( value , ch , fromIndex ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns the index within this string of the last occurrence of
2012-01-23 12:17:30 -08:00
* the specified character . For values of { @code ch } in the
2007-12-01 00:00:00 +00:00
* range from 0 to 0xFFFF ( inclusive ) , the index ( in Unicode code
* units ) returned is the largest value < i > k < / i > such that :
* < blockquote > < pre >
* this . charAt ( < i > k < / i > ) = = ch
* < / pre > < / blockquote >
2012-01-23 12:17:30 -08:00
* is true . For other values of { @code ch } , it is the
2007-12-01 00:00:00 +00:00
* largest value < i > k < / i > such that :
* < blockquote > < pre >
* this . codePointAt ( < i > k < / i > ) = = ch
* < / pre > < / blockquote >
* is true . In either case , if no such character occurs in this
2012-01-23 12:17:30 -08:00
* string , then { @code - 1 } is returned . The
* { @code String } is searched backwards starting at the last
2007-12-01 00:00:00 +00:00
* character .
*
* @param ch a character ( Unicode code point ) .
* @return the index of the last occurrence of the character in the
* character sequence represented by this object , or
2012-01-23 12:17:30 -08:00
* { @code - 1 } if the character does not occur .
2007-12-01 00:00:00 +00:00
* /
public int lastIndexOf ( int ch ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return lastIndexOf ( ch , length ( ) - 1 ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns the index within this string of the last occurrence of
* the specified character , searching backward starting at the
2012-01-23 12:17:30 -08:00
* specified index . For values of { @code ch } in the range
2007-12-01 00:00:00 +00:00
* from 0 to 0xFFFF ( inclusive ) , the index returned is the largest
* value < i > k < / i > such that :
* < blockquote > < pre >
2012-12-28 16:56:54 -05:00
* ( this . charAt ( < i > k < / i > ) = = ch ) { @code & & } ( < i > k < / i > & lt ; = fromIndex )
2007-12-01 00:00:00 +00:00
* < / pre > < / blockquote >
2012-01-23 12:17:30 -08:00
* is true . For other values of { @code ch } , it is the
2007-12-01 00:00:00 +00:00
* largest value < i > k < / i > such that :
* < blockquote > < pre >
2012-12-28 16:56:54 -05:00
* ( this . codePointAt ( < i > k < / i > ) = = ch ) { @code & & } ( < i > k < / i > & lt ; = fromIndex )
2007-12-01 00:00:00 +00:00
* < / pre > < / blockquote >
* is true . In either case , if no such character occurs in this
2012-01-23 12:17:30 -08:00
* string at or before position { @code fromIndex } , then
* { @code - 1 } is returned .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* < p > All indices are specified in { @code char } values
2007-12-01 00:00:00 +00:00
* ( Unicode code units ) .
*
* @param ch a character ( Unicode code point ) .
* @param fromIndex the index to start the search from . There is no
2012-01-23 12:17:30 -08:00
* restriction on the value of { @code fromIndex } . If it is
2007-12-01 00:00:00 +00:00
* greater than or equal to the length of this string , it has
* the same effect as if it were equal to one less than the
* length of this string : this entire string may be searched .
* If it is negative , it has the same effect as if it were - 1 :
* - 1 is returned .
* @return the index of the last occurrence of the character in the
* character sequence represented by this object that is less
2012-01-23 12:17:30 -08:00
* than or equal to { @code fromIndex } , or { @code - 1 }
2007-12-01 00:00:00 +00:00
* if the character does not occur before that point .
* /
public int lastIndexOf ( int ch , int fromIndex ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return isLatin1 ( ) ? StringLatin1 . lastIndexOf ( value , ch , fromIndex )
: StringUTF16 . lastIndexOf ( value , ch , fromIndex ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns the index within this string of the first occurrence of the
2010-06-30 16:11:32 -07:00
* specified substring .
*
2014-02-26 13:02:05 -08:00
* < p > The returned index is the smallest value { @code k } for which :
* < pre > { @code
* this . startsWith ( str , k )
* } < / pre >
* If no such value of { @code k } exists , then { @code - 1 } is returned .
2007-12-01 00:00:00 +00:00
*
2010-06-30 16:11:32 -07:00
* @param str the substring to search for .
* @return the index of the first occurrence of the specified substring ,
* or { @code - 1 } if there is no such occurrence .
2007-12-01 00:00:00 +00:00
* /
public int indexOf ( String str ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( coder ( ) = = str . coder ( ) ) {
return isLatin1 ( ) ? StringLatin1 . indexOf ( value , str . value )
: StringUTF16 . indexOf ( value , str . value ) ;
}
if ( coder ( ) = = LATIN1 ) { // str.coder == UTF16
return - 1 ;
}
return StringUTF16 . indexOfLatin1 ( value , str . value ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns the index within this string of the first occurrence of the
2010-06-30 16:11:32 -07:00
* specified substring , starting at the specified index .
*
2014-02-26 13:02:05 -08:00
* < p > The returned index is the smallest value { @code k } for which :
* < pre > { @code
* k > = Math . min ( fromIndex , this . length ( ) ) & &
* this . startsWith ( str , k )
* } < / pre >
* If no such value of { @code k } exists , then { @code - 1 } is returned .
2007-12-01 00:00:00 +00:00
*
2010-06-30 16:11:32 -07:00
* @param str the substring to search for .
2007-12-01 00:00:00 +00:00
* @param fromIndex the index from which to start the search .
2010-06-30 16:11:32 -07:00
* @return the index of the first occurrence of the specified substring ,
* starting at the specified index ,
* or { @code - 1 } if there is no such occurrence .
2007-12-01 00:00:00 +00:00
* /
public int indexOf ( String str , int fromIndex ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return indexOf ( value , coder ( ) , length ( ) , str , fromIndex ) ;
2007-12-01 00:00:00 +00:00
}
2012-11-29 14:09:45 -08:00
/ * *
* Code shared by String and AbstractStringBuilder to do searches . The
* source is the character array being searched , and the target
* is the string being searched for .
*
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
* @param src the characters being searched .
* @param srcCoder the coder of the source string .
* @param srcCount length of the source string .
* @param tgtStr the characters being searched for .
* @param fromIndex the index to begin searching from .
2012-11-29 14:09:45 -08:00
* /
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
static int indexOf ( byte [ ] src , byte srcCoder , int srcCount ,
String tgtStr , int fromIndex ) {
byte [ ] tgt = tgtStr . value ;
byte tgtCoder = tgtStr . coder ( ) ;
int tgtCount = tgtStr . length ( ) ;
if ( fromIndex > = srcCount ) {
return ( tgtCount = = 0 ? srcCount : - 1 ) ;
2007-12-01 00:00:00 +00:00
}
if ( fromIndex < 0 ) {
fromIndex = 0 ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( tgtCount = = 0 ) {
2007-12-01 00:00:00 +00:00
return fromIndex ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( srcCoder = = tgtCoder ) {
return srcCoder = = LATIN1
? StringLatin1 . indexOf ( src , srcCount , tgt , tgtCount , fromIndex )
: StringUTF16 . indexOf ( src , srcCount , tgt , tgtCount , fromIndex ) ;
2007-12-01 00:00:00 +00:00
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( srcCoder = = LATIN1 ) { // && tgtCoder == UTF16
return - 1 ;
}
// srcCoder == UTF16 && tgtCoder == LATIN1) {
return StringUTF16 . indexOfLatin1 ( src , srcCount , tgt , tgtCount , fromIndex ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2010-06-30 16:11:32 -07:00
* Returns the index within this string of the last occurrence of the
* specified substring . The last occurrence of the empty string " "
* is considered to occur at the index value { @code this . length ( ) } .
*
2014-02-26 13:02:05 -08:00
* < p > The returned index is the largest value { @code k } for which :
* < pre > { @code
* this . startsWith ( str , k )
* } < / pre >
* If no such value of { @code k } exists , then { @code - 1 } is returned .
2007-12-01 00:00:00 +00:00
*
* @param str the substring to search for .
2010-06-30 16:11:32 -07:00
* @return the index of the last occurrence of the specified substring ,
* or { @code - 1 } if there is no such occurrence .
2007-12-01 00:00:00 +00:00
* /
public int lastIndexOf ( String str ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return lastIndexOf ( str , length ( ) ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns the index within this string of the last occurrence of the
* specified substring , searching backward starting at the specified index .
2010-06-30 16:11:32 -07:00
*
2014-02-26 13:02:05 -08:00
* < p > The returned index is the largest value { @code k } for which :
* < pre > { @code
* k < = Math . min ( fromIndex , this . length ( ) ) & &
* this . startsWith ( str , k )
* } < / pre >
* If no such value of { @code k } exists , then { @code - 1 } is returned .
2007-12-01 00:00:00 +00:00
*
* @param str the substring to search for .
* @param fromIndex the index to start the search from .
2010-06-30 16:11:32 -07:00
* @return the index of the last occurrence of the specified substring ,
* searching backward from the specified index ,
* or { @code - 1 } if there is no such occurrence .
2007-12-01 00:00:00 +00:00
* /
public int lastIndexOf ( String str , int fromIndex ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return lastIndexOf ( value , coder ( ) , length ( ) , str , fromIndex ) ;
2007-12-01 00:00:00 +00:00
}
2012-11-29 14:09:45 -08:00
/ * *
* Code shared by String and AbstractStringBuilder to do searches . The
* source is the character array being searched , and the target
* is the string being searched for .
*
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
* @param src the characters being searched .
* @param srcCoder coder handles the mapping between bytes / chars
* @param srcCount count of the source string .
* @param tgt the characters being searched for .
* @param fromIndex the index to begin searching from .
* /
static int lastIndexOf ( byte [ ] src , byte srcCoder , int srcCount ,
String tgtStr , int fromIndex ) {
byte [ ] tgt = tgtStr . value ;
byte tgtCoder = tgtStr . coder ( ) ;
int tgtCount = tgtStr . length ( ) ;
2007-12-01 00:00:00 +00:00
/ *
* Check arguments ; return immediately where possible . For
* consistency , don ' t check for null str .
* /
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int rightIndex = srcCount - tgtCount ;
2007-12-01 00:00:00 +00:00
if ( fromIndex < 0 ) {
return - 1 ;
}
if ( fromIndex > rightIndex ) {
fromIndex = rightIndex ;
}
/* Empty string always matches. */
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( tgtCount = = 0 ) {
2007-12-01 00:00:00 +00:00
return fromIndex ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( srcCoder = = tgtCoder ) {
return srcCoder = = LATIN1
? StringLatin1 . lastIndexOf ( src , srcCount , tgt , tgtCount , fromIndex )
: StringUTF16 . lastIndexOf ( src , srcCount , tgt , tgtCount , fromIndex ) ;
}
if ( srcCoder = = LATIN1 ) { // && tgtCoder == UTF16
return - 1 ;
}
// srcCoder == UTF16 && tgtCoder == LATIN1
int min = tgtCount - 1 ;
2007-12-01 00:00:00 +00:00
int i = min + fromIndex ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int strLastIndex = tgtCount - 1 ;
2007-12-01 00:00:00 +00:00
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
char strLastChar = ( char ) ( tgt [ strLastIndex ] & 0xff ) ;
2013-04-02 18:41:04 -04:00
startSearchForLastChar :
2007-12-01 00:00:00 +00:00
while ( true ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
while ( i > = min & & StringUTF16 . getChar ( src , i ) ! = strLastChar ) {
2007-12-01 00:00:00 +00:00
i - - ;
}
if ( i < min ) {
return - 1 ;
}
int j = i - 1 ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int start = j - strLastIndex ;
2007-12-01 00:00:00 +00:00
int k = strLastIndex - 1 ;
while ( j > start ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( StringUTF16 . getChar ( src , j - - ) ! = ( tgt [ k - - ] & 0xff ) ) {
2007-12-01 00:00:00 +00:00
i - - ;
continue startSearchForLastChar ;
}
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return start + 1 ;
2007-12-01 00:00:00 +00:00
}
}
/ * *
2013-11-21 16:02:16 -08:00
* Returns a string that is a substring of this string . The
2007-12-01 00:00:00 +00:00
* substring begins with the character at the specified index and
* extends to the end of this string . < p >
* Examples :
* < blockquote > < pre >
* " unhappy " . substring ( 2 ) returns " happy "
* " Harbison " . substring ( 3 ) returns " bison "
* " emptiness " . substring ( 9 ) returns " " ( an empty string )
* < / pre > < / blockquote >
*
* @param beginIndex the beginning index , inclusive .
* @return the specified substring .
* @exception IndexOutOfBoundsException if
2012-01-23 12:17:30 -08:00
* { @code beginIndex } is negative or larger than the
* length of this { @code String } object .
2007-12-01 00:00:00 +00:00
* /
public String substring ( int beginIndex ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( beginIndex < 0 ) {
throw new StringIndexOutOfBoundsException ( beginIndex ) ;
2012-05-17 10:06:19 -07:00
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int subLen = length ( ) - beginIndex ;
2012-05-17 10:06:19 -07:00
if ( subLen < 0 ) {
throw new StringIndexOutOfBoundsException ( subLen ) ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( beginIndex = = 0 ) {
return this ;
}
return isLatin1 ( ) ? StringLatin1 . newString ( value , beginIndex , subLen )
: StringUTF16 . newString ( value , beginIndex , subLen ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2013-11-21 16:02:16 -08:00
* Returns a string that is a substring of this string . The
2012-01-23 12:17:30 -08:00
* substring begins at the specified { @code beginIndex } and
* extends to the character at index { @code endIndex - 1 } .
* Thus the length of the substring is { @code endIndex - beginIndex } .
2007-12-01 00:00:00 +00:00
* < p >
* Examples :
* < blockquote > < pre >
* " hamburger " . substring ( 4 , 8 ) returns " urge "
* " smiles " . substring ( 1 , 5 ) returns " mile "
* < / pre > < / blockquote >
*
* @param beginIndex the beginning index , inclusive .
* @param endIndex the ending index , exclusive .
* @return the specified substring .
* @exception IndexOutOfBoundsException if the
2012-01-23 12:17:30 -08:00
* { @code beginIndex } is negative , or
* { @code endIndex } is larger than the length of
* this { @code String } object , or
* { @code beginIndex } is larger than
* { @code endIndex } .
2007-12-01 00:00:00 +00:00
* /
public String substring ( int beginIndex , int endIndex ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int length = length ( ) ;
checkBoundsBeginEnd ( beginIndex , endIndex , length ) ;
2012-05-17 10:06:19 -07:00
int subLen = endIndex - beginIndex ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( beginIndex = = 0 & & endIndex = = length ) {
return this ;
2007-12-01 00:00:00 +00:00
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return isLatin1 ( ) ? StringLatin1 . newString ( value , beginIndex , subLen )
: StringUTF16 . newString ( value , beginIndex , subLen ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2013-12-03 15:52:16 -08:00
* Returns a character sequence that is a subsequence of this sequence .
2007-12-01 00:00:00 +00:00
*
* < p > An invocation of this method of the form
*
* < blockquote > < pre >
* str . subSequence ( begin , & nbsp ; end ) < / pre > < / blockquote >
*
* behaves in exactly the same way as the invocation
*
* < blockquote > < pre >
* str . substring ( begin , & nbsp ; end ) < / pre > < / blockquote >
*
2013-11-21 16:02:16 -08:00
* @apiNote
2012-06-29 16:16:13 -07:00
* This method is defined so that the { @code String } class can implement
2013-04-02 18:41:04 -04:00
* the { @link CharSequence } interface .
2007-12-01 00:00:00 +00:00
*
2012-06-29 16:16:13 -07:00
* @param beginIndex the begin index , inclusive .
* @param endIndex the end index , exclusive .
* @return the specified subsequence .
2007-12-01 00:00:00 +00:00
*
* @throws IndexOutOfBoundsException
2012-06-29 16:16:13 -07:00
* if { @code beginIndex } or { @code endIndex } is negative ,
* if { @code endIndex } is greater than { @code length ( ) } ,
* or if { @code beginIndex } is greater than { @code endIndex }
2007-12-01 00:00:00 +00:00
*
* @since 1 . 4
* @spec JSR - 51
* /
public CharSequence subSequence ( int beginIndex , int endIndex ) {
return this . substring ( beginIndex , endIndex ) ;
}
/ * *
* Concatenates the specified string to the end of this string .
* < p >
2012-01-23 12:17:30 -08:00
* If the length of the argument string is { @code 0 } , then this
2013-11-21 16:02:16 -08:00
* { @code String } object is returned . Otherwise , a
* { @code String } object is returned that represents a character
2007-12-01 00:00:00 +00:00
* sequence that is the concatenation of the character sequence
2012-01-23 12:17:30 -08:00
* represented by this { @code String } object and the character
2007-12-01 00:00:00 +00:00
* sequence represented by the argument string . < p >
* Examples :
* < blockquote > < pre >
* " cares " . concat ( " s " ) returns " caress "
* " to " . concat ( " get " ) . concat ( " her " ) returns " together "
* < / pre > < / blockquote >
*
2012-01-23 12:17:30 -08:00
* @param str the { @code String } that is concatenated to the end
* of this { @code String } .
2007-12-01 00:00:00 +00:00
* @return a string that represents the concatenation of this object ' s
* characters followed by the string argument ' s characters .
* /
public String concat ( String str ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int olen = str . length ( ) ;
if ( olen = = 0 ) {
2007-12-01 00:00:00 +00:00
return this ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( coder ( ) = = str . coder ( ) ) {
byte [ ] val = this . value ;
byte [ ] oval = str . value ;
int len = val . length + oval . length ;
byte [ ] buf = Arrays . copyOf ( val , len ) ;
System . arraycopy ( oval , 0 , buf , val . length , oval . length ) ;
return new String ( buf , coder ) ;
}
int len = length ( ) ;
byte [ ] buf = StringUTF16 . newBytesFor ( len + olen ) ;
getBytes ( buf , 0 , UTF16 ) ;
str . getBytes ( buf , len , UTF16 ) ;
return new String ( buf , UTF16 ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2013-11-21 16:02:16 -08:00
* Returns a string resulting from replacing all occurrences of
2012-01-23 12:17:30 -08:00
* { @code oldChar } in this string with { @code newChar } .
2007-12-01 00:00:00 +00:00
* < p >
2012-01-23 12:17:30 -08:00
* If the character { @code oldChar } does not occur in the
* character sequence represented by this { @code String } object ,
* then a reference to this { @code String } object is returned .
2013-11-21 16:02:16 -08:00
* Otherwise , a { @code String } object is returned that
2007-12-01 00:00:00 +00:00
* represents a character sequence identical to the character sequence
2012-01-23 12:17:30 -08:00
* represented by this { @code String } object , except that every
* occurrence of { @code oldChar } is replaced by an occurrence
* of { @code newChar } .
2007-12-01 00:00:00 +00:00
* < p >
* Examples :
* < blockquote > < pre >
* " mesquite in your cellar " . replace ( 'e' , 'o' )
* returns " mosquito in your collar "
* " the war of baronets " . replace ( 'r' , 'y' )
* returns " the way of bayonets "
* " sparring with a purple porpoise " . replace ( 'p' , 't' )
* returns " starring with a turtle tortoise "
* " JonL " . replace ( 'q' , 'x' ) returns " JonL " ( no change )
* < / pre > < / blockquote >
*
* @param oldChar the old character .
* @param newChar the new character .
* @return a string derived from this string by replacing every
2012-01-23 12:17:30 -08:00
* occurrence of { @code oldChar } with { @code newChar } .
2007-12-01 00:00:00 +00:00
* /
public String replace ( char oldChar , char newChar ) {
if ( oldChar ! = newChar ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
String ret = isLatin1 ( ) ? StringLatin1 . replace ( value , oldChar , newChar )
: StringUTF16 . replace ( value , oldChar , newChar ) ;
if ( ret ! = null ) {
return ret ;
2007-12-01 00:00:00 +00:00
}
}
return this ;
}
/ * *
* Tells whether or not this string matches the given < a
* href = " ../util/regex/Pattern.html#sum " > regular expression < / a > .
*
* < p > An invocation of this method of the form
2012-12-28 16:56:54 -05:00
* < i > str < / i > { @code . matches ( } < i > regex < / i > { @code ) } yields exactly the
2007-12-01 00:00:00 +00:00
* same result as the expression
*
2012-12-28 16:56:54 -05:00
* < blockquote >
* { @link java . util . regex . Pattern } . { @link java . util . regex . Pattern # matches ( String , CharSequence )
* matches ( < i > regex < / i > , < i > str < / i > ) }
* < / blockquote >
2007-12-01 00:00:00 +00:00
*
* @param regex
* the regular expression to which this string is to be matched
*
2012-12-28 16:56:54 -05:00
* @return { @code true } if , and only if , this string matches the
2007-12-01 00:00:00 +00:00
* given regular expression
*
* @throws PatternSyntaxException
* if the regular expression ' s syntax is invalid
*
* @see java . util . regex . Pattern
*
* @since 1 . 4
* @spec JSR - 51
* /
public boolean matches ( String regex ) {
return Pattern . matches ( regex , this ) ;
}
/ * *
* Returns true if and only if this string contains the specified
* sequence of char values .
*
* @param s the sequence to search for
2012-01-23 12:17:30 -08:00
* @return true if this string contains { @code s } , false otherwise
2007-12-01 00:00:00 +00:00
* @since 1 . 5
* /
public boolean contains ( CharSequence s ) {
2014-08-29 14:50:15 -07:00
return indexOf ( s . toString ( ) ) > = 0 ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Replaces the first substring of this string that matches the given < a
* href = " ../util/regex/Pattern.html#sum " > regular expression < / a > with the
* given replacement .
*
* < p > An invocation of this method of the form
2012-12-28 16:56:54 -05:00
* < i > str < / i > { @code . replaceFirst ( } < i > regex < / i > { @code , } < i > repl < / i > { @code ) }
2007-12-01 00:00:00 +00:00
* yields exactly the same result as the expression
*
2012-12-28 16:56:54 -05:00
* < blockquote >
* < code >
* { @link java . util . regex . Pattern } . { @link
* java . util . regex . Pattern # compile compile } ( < i > regex < / i > ) . { @link
* java . util . regex . Pattern # matcher ( java . lang . CharSequence ) matcher } ( < i > str < / i > ) . { @link
* java . util . regex . Matcher # replaceFirst replaceFirst } ( < i > repl < / i > )
* < / code >
* < / blockquote >
2007-12-01 00:00:00 +00:00
*
* < p >
2012-12-28 16:56:54 -05:00
* Note that backslashes ( { @code \ } ) and dollar signs ( { @code $ } ) in the
2007-12-01 00:00:00 +00:00
* replacement string may cause the results to be different than if it were
* being treated as a literal replacement string ; see
* { @link java . util . regex . Matcher # replaceFirst } .
* Use { @link java . util . regex . Matcher # quoteReplacement } to suppress the special
* meaning of these characters , if desired .
*
* @param regex
* the regular expression to which this string is to be matched
* @param replacement
* the string to be substituted for the first match
*
2012-12-28 16:56:54 -05:00
* @return The resulting { @code String }
2007-12-01 00:00:00 +00:00
*
* @throws PatternSyntaxException
* if the regular expression ' s syntax is invalid
*
* @see java . util . regex . Pattern
*
* @since 1 . 4
* @spec JSR - 51
* /
public String replaceFirst ( String regex , String replacement ) {
return Pattern . compile ( regex ) . matcher ( this ) . replaceFirst ( replacement ) ;
}
/ * *
* Replaces each substring of this string that matches the given < a
* href = " ../util/regex/Pattern.html#sum " > regular expression < / a > with the
* given replacement .
*
* < p > An invocation of this method of the form
2012-12-28 16:56:54 -05:00
* < i > str < / i > { @code . replaceAll ( } < i > regex < / i > { @code , } < i > repl < / i > { @code ) }
2007-12-01 00:00:00 +00:00
* yields exactly the same result as the expression
*
2012-12-28 16:56:54 -05:00
* < blockquote >
* < code >
* { @link java . util . regex . Pattern } . { @link
* java . util . regex . Pattern # compile compile } ( < i > regex < / i > ) . { @link
* java . util . regex . Pattern # matcher ( java . lang . CharSequence ) matcher } ( < i > str < / i > ) . { @link
* java . util . regex . Matcher # replaceAll replaceAll } ( < i > repl < / i > )
* < / code >
* < / blockquote >
2007-12-01 00:00:00 +00:00
*
* < p >
2012-12-28 16:56:54 -05:00
* Note that backslashes ( { @code \ } ) and dollar signs ( { @code $ } ) in the
2007-12-01 00:00:00 +00:00
* replacement string may cause the results to be different than if it were
* being treated as a literal replacement string ; see
* { @link java . util . regex . Matcher # replaceAll Matcher . replaceAll } .
* Use { @link java . util . regex . Matcher # quoteReplacement } to suppress the special
* meaning of these characters , if desired .
*
* @param regex
* the regular expression to which this string is to be matched
* @param replacement
* the string to be substituted for each match
*
2012-12-28 16:56:54 -05:00
* @return The resulting { @code String }
2007-12-01 00:00:00 +00:00
*
* @throws PatternSyntaxException
* if the regular expression ' s syntax is invalid
*
* @see java . util . regex . Pattern
*
* @since 1 . 4
* @spec JSR - 51
* /
public String replaceAll ( String regex , String replacement ) {
return Pattern . compile ( regex ) . matcher ( this ) . replaceAll ( replacement ) ;
}
/ * *
* Replaces each substring of this string that matches the literal target
* sequence with the specified literal replacement sequence . The
* replacement proceeds from the beginning of the string to the end , for
* example , replacing " aa " with " b " in the string " aaa " will result in
* " ba " rather than " ab " .
*
* @param target The sequence of char values to be replaced
* @param replacement The replacement sequence of char values
* @return The resulting string
* @since 1 . 5
* /
public String replace ( CharSequence target , CharSequence replacement ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
String tgtStr = target . toString ( ) ;
String replStr = replacement . toString ( ) ;
int j = indexOf ( tgtStr ) ;
2015-06-03 19:26:58 +03:00
if ( j < 0 ) {
return this ;
}
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int tgtLen = tgtStr . length ( ) ;
int tgtLen1 = Math . max ( tgtLen , 1 ) ;
int thisLen = length ( ) ;
int newLenHint = thisLen - tgtLen + replStr . length ( ) ;
2015-06-03 19:26:58 +03:00
if ( newLenHint < 0 ) {
throw new OutOfMemoryError ( ) ;
}
StringBuilder sb = new StringBuilder ( newLenHint ) ;
int i = 0 ;
do {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
sb . append ( this , i , j ) . append ( replStr ) ;
i = j + tgtLen ;
} while ( j < thisLen & & ( j = indexOf ( tgtStr , j + tgtLen1 ) ) > 0 ) ;
return sb . append ( this , i , thisLen ) . toString ( ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Splits this string around matches of the given
* < a href = " ../util/regex/Pattern.html#sum " > regular expression < / a > .
*
* < p > The array returned by this method contains each substring of this
* string that is terminated by another substring that matches the given
* expression or is terminated by the end of the string . The substrings in
* the array are in the order in which they occur in this string . If the
* expression does not match any part of the input then the resulting array
2013-11-13 22:22:28 -08:00
* has just one element , namely this string .
2013-11-13 11:26:01 -08:00
*
* < p > When there is a positive - width match at the beginning of this
* string then an empty leading substring is included at the beginning
* of the resulting array . A zero - width match at the beginning however
* never produces such empty leading substring .
2007-12-01 00:00:00 +00:00
*
2012-12-28 16:56:54 -05:00
* < p > The { @code limit } parameter controls the number of times the
2007-12-01 00:00:00 +00:00
* pattern is applied and therefore affects the length of the resulting
* array . If the limit < i > n < / i > is greater than zero then the pattern
* will be applied at most < i > n < / i > & nbsp ; - & nbsp ; 1 times , the array ' s
* length will be no greater than < i > n < / i > , and the array ' s last entry
* will contain all input beyond the last matched delimiter . If < i > n < / i >
* is non - positive then the pattern will be applied as many times as
* possible and the array can have any length . If < i > n < / i > is zero then
* the pattern will be applied as many times as possible , the array can
* have any length , and trailing empty strings will be discarded .
*
2012-12-28 16:56:54 -05:00
* < p > The string { @code " boo:and:foo " } , for example , yields the
2007-12-01 00:00:00 +00:00
* following results with these parameters :
*
* < blockquote > < table cellpadding = 1 cellspacing = 0 summary = " Split example showing regex, limit, and result " >
* < tr >
* < th > Regex < / th >
* < th > Limit < / th >
* < th > Result < / th >
* < / tr >
* < tr > < td align = center > : < / td >
* < td align = center > 2 < / td >
2012-12-28 16:56:54 -05:00
* < td > { @code { " boo " , " and:foo " } } < / td > < / tr >
2007-12-01 00:00:00 +00:00
* < tr > < td align = center > : < / td >
* < td align = center > 5 < / td >
2012-12-28 16:56:54 -05:00
* < td > { @code { " boo " , " and " , " foo " } } < / td > < / tr >
2007-12-01 00:00:00 +00:00
* < tr > < td align = center > : < / td >
* < td align = center > - 2 < / td >
2012-12-28 16:56:54 -05:00
* < td > { @code { " boo " , " and " , " foo " } } < / td > < / tr >
2007-12-01 00:00:00 +00:00
* < tr > < td align = center > o < / td >
* < td align = center > 5 < / td >
2012-12-28 16:56:54 -05:00
* < td > { @code { " b " , " " , " :and:f " , " " , " " } } < / td > < / tr >
2007-12-01 00:00:00 +00:00
* < tr > < td align = center > o < / td >
* < td align = center > - 2 < / td >
2012-12-28 16:56:54 -05:00
* < td > { @code { " b " , " " , " :and:f " , " " , " " } } < / td > < / tr >
2007-12-01 00:00:00 +00:00
* < tr > < td align = center > o < / td >
* < td align = center > 0 < / td >
2012-12-28 16:56:54 -05:00
* < td > { @code { " b " , " " , " :and:f " } } < / td > < / tr >
2007-12-01 00:00:00 +00:00
* < / table > < / blockquote >
*
* < p > An invocation of this method of the form
2012-12-28 16:56:54 -05:00
* < i > str . < / i > { @code split ( } < i > regex < / i > { @code , } & nbsp ; < i > n < / i > { @code ) }
2007-12-01 00:00:00 +00:00
* yields the same result as the expression
*
* < blockquote >
2012-12-28 16:56:54 -05:00
* < code >
* { @link java . util . regex . Pattern } . { @link
* java . util . regex . Pattern # compile compile } ( < i > regex < / i > ) . { @link
* java . util . regex . Pattern # split ( java . lang . CharSequence , int ) split } ( < i > str < / i > , & nbsp ; < i > n < / i > )
* < / code >
2007-12-01 00:00:00 +00:00
* < / blockquote >
*
*
* @param regex
* the delimiting regular expression
*
* @param limit
* the result threshold , as described above
*
* @return the array of strings computed by splitting this string
* around matches of the given regular expression
*
* @throws PatternSyntaxException
* if the regular expression ' s syntax is invalid
*
* @see java . util . regex . Pattern
*
* @since 1 . 4
* @spec JSR - 51
* /
public String [ ] split ( String regex , int limit ) {
2009-08-13 10:50:23 -07:00
/ * fastpath if the regex is a
2012-05-17 10:06:19 -07:00
( 1 ) one - char String and this character is not one of the
RegEx ' s meta characters " .$|()[{^?*+ \\ " , or
( 2 ) two - char String and the first char is the backslash and
the second is not the ascii digit or ascii letter .
* /
2009-08-13 10:50:23 -07:00
char ch = 0 ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( ( ( regex . length ( ) = = 1 & &
2009-08-13 10:50:23 -07:00
" .$|()[{^?*+ \\ " . indexOf ( ch = regex . charAt ( 0 ) ) = = - 1 ) | |
( regex . length ( ) = = 2 & &
regex . charAt ( 0 ) = = '\\' & &
( ( ( ch = regex . charAt ( 1 ) ) - '0' ) | ( '9' - ch ) ) < 0 & &
( ( ch - 'a' ) | ( 'z' - ch ) ) < 0 & &
( ( ch - 'A' ) | ( 'Z' - ch ) ) < 0 ) ) & &
( ch < Character . MIN_HIGH_SURROGATE | |
ch > Character . MAX_LOW_SURROGATE ) )
{
int off = 0 ;
int next = 0 ;
boolean limited = limit > 0 ;
2010-12-20 13:47:04 -08:00
ArrayList < String > list = new ArrayList < > ( ) ;
2009-08-13 10:50:23 -07:00
while ( ( next = indexOf ( ch , off ) ) ! = - 1 ) {
if ( ! limited | | list . size ( ) < limit - 1 ) {
list . add ( substring ( off , next ) ) ;
off = next + 1 ;
} else { // last one
//assert (list.size() == limit - 1);
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
int last = length ( ) ;
list . add ( substring ( off , last ) ) ;
off = last ;
2009-08-13 10:50:23 -07:00
break ;
}
}
// If no match was found, return this
if ( off = = 0 )
2012-05-17 10:06:19 -07:00
return new String [ ] { this } ;
2009-08-13 10:50:23 -07:00
// Add remaining segment
if ( ! limited | | list . size ( ) < limit )
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
list . add ( substring ( off , length ( ) ) ) ;
2009-08-13 10:50:23 -07:00
// Construct result
int resultSize = list . size ( ) ;
2013-04-02 18:41:04 -04:00
if ( limit = = 0 ) {
while ( resultSize > 0 & & list . get ( resultSize - 1 ) . length ( ) = = 0 ) {
2009-08-13 10:50:23 -07:00
resultSize - - ;
2013-04-02 18:41:04 -04:00
}
}
2009-08-13 10:50:23 -07:00
String [ ] result = new String [ resultSize ] ;
return list . subList ( 0 , resultSize ) . toArray ( result ) ;
}
2007-12-01 00:00:00 +00:00
return Pattern . compile ( regex ) . split ( this , limit ) ;
}
/ * *
* Splits this string around matches of the given < a
* href = " ../util/regex/Pattern.html#sum " > regular expression < / a > .
*
* < p > This method works as if by invoking the two - argument { @link
* # split ( String , int ) split } method with the given expression and a limit
* argument of zero . Trailing empty strings are therefore not included in
* the resulting array .
*
2012-12-28 16:56:54 -05:00
* < p > The string { @code " boo:and:foo " } , for example , yields the following
2007-12-01 00:00:00 +00:00
* results with these expressions :
*
* < blockquote > < table cellpadding = 1 cellspacing = 0 summary = " Split examples showing regex and result " >
* < tr >
* < th > Regex < / th >
* < th > Result < / th >
* < / tr >
* < tr > < td align = center > : < / td >
2012-12-28 16:56:54 -05:00
* < td > { @code { " boo " , " and " , " foo " } } < / td > < / tr >
2007-12-01 00:00:00 +00:00
* < tr > < td align = center > o < / td >
2012-12-28 16:56:54 -05:00
* < td > { @code { " b " , " " , " :and:f " } } < / td > < / tr >
2007-12-01 00:00:00 +00:00
* < / table > < / blockquote >
*
*
* @param regex
* the delimiting regular expression
*
* @return the array of strings computed by splitting this string
* around matches of the given regular expression
*
* @throws PatternSyntaxException
* if the regular expression ' s syntax is invalid
*
* @see java . util . regex . Pattern
*
* @since 1 . 4
* @spec JSR - 51
* /
public String [ ] split ( String regex ) {
return split ( regex , 0 ) ;
}
2013-04-02 18:41:04 -04:00
/ * *
* Returns a new String composed of copies of the
* { @code CharSequence elements } joined together with a copy of
* the specified { @code delimiter } .
*
* < blockquote > For example ,
* < pre > { @code
* String message = String . join ( " - " , " Java " , " is " , " cool " ) ;
* // message returned is: "Java-is-cool"
* } < / pre > < / blockquote >
*
* Note that if an element is null , then { @code " null " } is added .
*
* @param delimiter the delimiter that separates each element
* @param elements the elements to join together .
*
* @return a new { @code String } that is composed of the { @code elements }
* separated by the { @code delimiter }
*
* @throws NullPointerException If { @code delimiter } or { @code elements }
* is { @code null }
*
* @see java . util . StringJoiner
* @since 1 . 8
* /
public static String join ( CharSequence delimiter , CharSequence . . . elements ) {
Objects . requireNonNull ( delimiter ) ;
Objects . requireNonNull ( elements ) ;
// Number of elements not likely worth Arrays.stream overhead.
StringJoiner joiner = new StringJoiner ( delimiter ) ;
for ( CharSequence cs : elements ) {
joiner . add ( cs ) ;
}
return joiner . toString ( ) ;
}
/ * *
* Returns a new { @code String } composed of copies of the
* { @code CharSequence elements } joined together with a copy of the
* specified { @code delimiter } .
*
* < blockquote > For example ,
* < pre > { @code
* List < String > strings = new LinkedList < > ( ) ;
* strings . add ( " Java " ) ; strings . add ( " is " ) ;
* strings . add ( " cool " ) ;
* String message = String . join ( " " , strings ) ;
* //message returned is: "Java is cool"
*
2013-09-03 16:05:45 -07:00
* Set < String > strings = new LinkedHashSet < > ( ) ;
* strings . add ( " Java " ) ; strings . add ( " is " ) ;
2013-04-02 18:41:04 -04:00
* strings . add ( " very " ) ; strings . add ( " cool " ) ;
* String message = String . join ( " - " , strings ) ;
* //message returned is: "Java-is-very-cool"
* } < / pre > < / blockquote >
*
* Note that if an individual element is { @code null } , then { @code " null " } is added .
*
* @param delimiter a sequence of characters that is used to separate each
* of the { @code elements } in the resulting { @code String }
* @param elements an { @code Iterable } that will have its { @code elements }
* joined together .
*
* @return a new { @code String } that is composed from the { @code elements }
* argument
*
* @throws NullPointerException If { @code delimiter } or { @code elements }
* is { @code null }
*
* @see # join ( CharSequence , CharSequence . . . )
* @see java . util . StringJoiner
* @since 1 . 8
* /
public static String join ( CharSequence delimiter ,
Iterable < ? extends CharSequence > elements ) {
Objects . requireNonNull ( delimiter ) ;
Objects . requireNonNull ( elements ) ;
StringJoiner joiner = new StringJoiner ( delimiter ) ;
for ( CharSequence cs : elements ) {
joiner . add ( cs ) ;
}
return joiner . toString ( ) ;
}
2007-12-01 00:00:00 +00:00
/ * *
2012-01-23 12:17:30 -08:00
* Converts all of the characters in this { @code String } to lower
* case using the rules of the given { @code Locale } . Case mapping is based
2007-12-01 00:00:00 +00:00
* on the Unicode Standard version specified by the { @link java . lang . Character Character }
* class . Since case mappings are not always 1 : 1 char mappings , the resulting
2012-01-23 12:17:30 -08:00
* { @code String } may be a different length than the original { @code String } .
2007-12-01 00:00:00 +00:00
* < p >
* Examples of lowercase mappings are in the following table :
* < table border = " 1 " summary = " Lowercase mapping examples showing language code of locale, upper case, lower case, and description " >
* < tr >
* < th > Language Code of Locale < / th >
* < th > Upper Case < / th >
* < th > Lower Case < / th >
* < th > Description < / th >
* < / tr >
* < tr >
* < td > tr ( Turkish ) < / td >
* < td > & # 92 ; u0130 < / td >
* < td > & # 92 ; u0069 < / td >
* < td > capital letter I with dot above - & gt ; small letter i < / td >
* < / tr >
* < tr >
* < td > tr ( Turkish ) < / td >
* < td > & # 92 ; u0049 < / td >
* < td > & # 92 ; u0131 < / td >
* < td > capital letter I - & gt ; small letter dotless i < / td >
* < / tr >
* < tr >
* < td > ( all ) < / td >
* < td > French Fries < / td >
* < td > french fries < / td >
* < td > lowercased all chars in String < / td >
* < / tr >
* < tr >
* < td > ( all ) < / td >
* < td > < img src = " doc-files/capiota.gif " alt = " capiota " > < img src = " doc-files/capchi.gif " alt = " capchi " >
* < img src = " doc-files/captheta.gif " alt = " captheta " > < img src = " doc-files/capupsil.gif " alt = " capupsil " >
* < img src = " doc-files/capsigma.gif " alt = " capsigma " > < / td >
* < td > < img src = " doc-files/iota.gif " alt = " iota " > < img src = " doc-files/chi.gif " alt = " chi " >
* < img src = " doc-files/theta.gif " alt = " theta " > < img src = " doc-files/upsilon.gif " alt = " upsilon " >
* < img src = " doc-files/sigma1.gif " alt = " sigma " > < / td >
* < td > lowercased all chars in String < / td >
* < / tr >
* < / table >
*
* @param locale use the case transformation rules for this locale
2012-01-23 12:17:30 -08:00
* @return the { @code String } , converted to lowercase .
2007-12-01 00:00:00 +00:00
* @see java . lang . String # toLowerCase ( )
* @see java . lang . String # toUpperCase ( )
* @see java . lang . String # toUpperCase ( Locale )
* @since 1 . 1
* /
public String toLowerCase ( Locale locale ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return isLatin1 ( ) ? StringLatin1 . toLowerCase ( this , value , locale )
: StringUTF16 . toLowerCase ( this , value , locale ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2012-01-23 12:17:30 -08:00
* Converts all of the characters in this { @code String } to lower
2007-12-01 00:00:00 +00:00
* case using the rules of the default locale . This is equivalent to calling
2012-01-23 12:17:30 -08:00
* { @code toLowerCase ( Locale . getDefault ( ) ) } .
2007-12-01 00:00:00 +00:00
* < p >
* < b > Note : < / b > This method is locale sensitive , and may produce unexpected
* results if used for strings that are intended to be interpreted locale
* independently .
* Examples are programming language identifiers , protocol keys , and HTML
* tags .
2012-01-23 12:17:30 -08:00
* For instance , { @code " TITLE " . toLowerCase ( ) } in a Turkish locale
* returns { @code " t \ u005Cu0131tle " } , where ' \ u005Cu0131 ' is the
2010-05-09 16:37:06 -07:00
* LATIN SMALL LETTER DOTLESS I character .
2007-12-01 00:00:00 +00:00
* To obtain correct results for locale insensitive strings , use
2013-09-05 10:14:53 -07:00
* { @code toLowerCase ( Locale . ROOT ) } .
2014-05-12 14:12:33 +04:00
*
2012-01-23 12:17:30 -08:00
* @return the { @code String } , converted to lowercase .
2007-12-01 00:00:00 +00:00
* @see java . lang . String # toLowerCase ( Locale )
* /
public String toLowerCase ( ) {
return toLowerCase ( Locale . getDefault ( ) ) ;
}
/ * *
2012-01-23 12:17:30 -08:00
* Converts all of the characters in this { @code String } to upper
* case using the rules of the given { @code Locale } . Case mapping is based
2007-12-01 00:00:00 +00:00
* on the Unicode Standard version specified by the { @link java . lang . Character Character }
* class . Since case mappings are not always 1 : 1 char mappings , the resulting
2012-01-23 12:17:30 -08:00
* { @code String } may be a different length than the original { @code String } .
2007-12-01 00:00:00 +00:00
* < p >
* Examples of locale - sensitive and 1 : M case mappings are in the following table .
2013-10-22 17:02:08 -04:00
*
2007-12-01 00:00:00 +00:00
* < table border = " 1 " summary = " Examples of locale-sensitive and 1:M case mappings. Shows Language code of locale, lower case, upper case, and description. " >
* < tr >
* < th > Language Code of Locale < / th >
* < th > Lower Case < / th >
* < th > Upper Case < / th >
* < th > Description < / th >
* < / tr >
* < tr >
* < td > tr ( Turkish ) < / td >
* < td > & # 92 ; u0069 < / td >
* < td > & # 92 ; u0130 < / td >
* < td > small letter i - & gt ; capital letter I with dot above < / td >
* < / tr >
* < tr >
* < td > tr ( Turkish ) < / td >
* < td > & # 92 ; u0131 < / td >
* < td > & # 92 ; u0049 < / td >
* < td > small letter dotless i - & gt ; capital letter I < / td >
* < / tr >
* < tr >
* < td > ( all ) < / td >
* < td > & # 92 ; u00df < / td >
* < td > & # 92 ; u0053 & # 92 ; u0053 < / td >
* < td > small letter sharp s - & gt ; two letters : SS < / td >
* < / tr >
* < tr >
* < td > ( all ) < / td >
* < td > Fahrvergn & uuml ; gen < / td >
* < td > FAHRVERGN & Uuml ; GEN < / td >
* < td > < / td >
* < / tr >
* < / table >
* @param locale use the case transformation rules for this locale
2012-01-23 12:17:30 -08:00
* @return the { @code String } , converted to uppercase .
2007-12-01 00:00:00 +00:00
* @see java . lang . String # toUpperCase ( )
* @see java . lang . String # toLowerCase ( )
* @see java . lang . String # toLowerCase ( Locale )
* @since 1 . 1
* /
public String toUpperCase ( Locale locale ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return isLatin1 ( ) ? StringLatin1 . toUpperCase ( this , value , locale )
: StringUTF16 . toUpperCase ( this , value , locale ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2012-01-23 12:17:30 -08:00
* Converts all of the characters in this { @code String } to upper
2007-12-01 00:00:00 +00:00
* case using the rules of the default locale . This method is equivalent to
2012-01-23 12:17:30 -08:00
* { @code toUpperCase ( Locale . getDefault ( ) ) } .
2007-12-01 00:00:00 +00:00
* < p >
* < b > Note : < / b > This method is locale sensitive , and may produce unexpected
* results if used for strings that are intended to be interpreted locale
* independently .
* Examples are programming language identifiers , protocol keys , and HTML
* tags .
2012-01-23 12:17:30 -08:00
* For instance , { @code " title " . toUpperCase ( ) } in a Turkish locale
* returns { @code " T \ u005Cu0130TLE " } , where ' \ u005Cu0130 ' is the
2010-05-09 16:37:06 -07:00
* LATIN CAPITAL LETTER I WITH DOT ABOVE character .
2007-12-01 00:00:00 +00:00
* To obtain correct results for locale insensitive strings , use
2013-09-05 10:14:53 -07:00
* { @code toUpperCase ( Locale . ROOT ) } .
2014-05-12 14:12:33 +04:00
*
2012-01-23 12:17:30 -08:00
* @return the { @code String } , converted to uppercase .
2007-12-01 00:00:00 +00:00
* @see java . lang . String # toUpperCase ( Locale )
* /
public String toUpperCase ( ) {
return toUpperCase ( Locale . getDefault ( ) ) ;
}
/ * *
2013-11-21 16:02:16 -08:00
* Returns a string whose value is this string , with any leading and trailing
* whitespace removed .
2007-12-01 00:00:00 +00:00
* < p >
2012-01-23 12:17:30 -08:00
* If this { @code String } object represents an empty character
2007-12-01 00:00:00 +00:00
* sequence , or the first and last characters of character sequence
2012-01-23 12:17:30 -08:00
* represented by this { @code String } object both have codes
* greater than { @code ' \ u005Cu0020 ' } ( the space character ) , then a
* reference to this { @code String } object is returned .
2007-12-01 00:00:00 +00:00
* < p >
* Otherwise , if there is no character with a code greater than
2013-11-21 16:02:16 -08:00
* { @code ' \ u005Cu0020 ' } in the string , then a
* { @code String } object representing an empty string is
* returned .
2007-12-01 00:00:00 +00:00
* < p >
* Otherwise , let < i > k < / i > be the index of the first character in the
2012-01-23 12:17:30 -08:00
* string whose code is greater than { @code ' \ u005Cu0020 ' } , and let
2007-12-01 00:00:00 +00:00
* < i > m < / i > be the index of the last character in the string whose code
2013-11-21 16:02:16 -08:00
* is greater than { @code ' \ u005Cu0020 ' } . A { @code String }
* object is returned , representing the substring of this string that
2007-12-01 00:00:00 +00:00
* begins with the character at index < i > k < / i > and ends with the
* character at index < i > m < / i > - that is , the result of
2013-04-02 18:41:04 -04:00
* { @code this . substring ( k , m + 1 ) } .
2007-12-01 00:00:00 +00:00
* < p >
* This method may be used to trim whitespace ( as defined above ) from
* the beginning and end of a string .
*
2013-11-21 16:02:16 -08:00
* @return A string whose value is this string , with any leading and trailing white
2007-12-01 00:00:00 +00:00
* space removed , or this string if it has no leading or
* trailing white space .
* /
public String trim ( ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
String ret = isLatin1 ( ) ? StringLatin1 . trim ( value )
: StringUTF16 . trim ( value ) ;
return ret = = null ? this : ret ;
2007-12-01 00:00:00 +00:00
}
/ * *
* This object ( which is already a string ! ) is itself returned .
*
* @return the string itself .
* /
public String toString ( ) {
return this ;
}
2015-01-26 17:26:49 +00:00
/ * *
* Returns a stream of { @code int } zero - extending the { @code char } values
* from this sequence . Any char which maps to a < a
* href = " {@docRoot}/java/lang/Character.html#unicode " > surrogate code
* point < / a > is passed through uninterpreted .
*
* @return an IntStream of char values from this sequence
2016-01-20 11:02:36 -08:00
* @since 9
2015-01-26 17:26:49 +00:00
* /
@Override
public IntStream chars ( ) {
return StreamSupport . intStream (
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
isLatin1 ( ) ? new StringLatin1 . CharsSpliterator ( value , Spliterator . IMMUTABLE )
: new StringUTF16 . CharsSpliterator ( value , Spliterator . IMMUTABLE ) ,
false ) ;
2015-01-26 17:26:49 +00:00
}
/ * *
* Returns a stream of code point values from this sequence . Any surrogate
* pairs encountered in the sequence are combined as if by { @linkplain
* Character # toCodePoint Character . toCodePoint } and the result is passed
* to the stream . Any other code units , including ordinary BMP characters ,
* unpaired surrogates , and undefined code units , are zero - extended to
* { @code int } values which are then passed to the stream .
*
* @return an IntStream of Unicode code points from this sequence
2016-01-20 11:02:36 -08:00
* @since 9
2015-01-26 17:26:49 +00:00
* /
@Override
public IntStream codePoints ( ) {
return StreamSupport . intStream (
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
isLatin1 ( ) ? new StringLatin1 . CharsSpliterator ( value , Spliterator . IMMUTABLE )
: new StringUTF16 . CodePointsSpliterator ( value , Spliterator . IMMUTABLE ) ,
false ) ;
2015-01-26 17:26:49 +00:00
}
2007-12-01 00:00:00 +00:00
/ * *
* Converts this string to a new character array .
*
* @return a newly allocated character array whose length is the length
* of this string and whose contents are initialized to contain
* the character sequence represented by this string .
* /
public char [ ] toCharArray ( ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
return isLatin1 ( ) ? StringLatin1 . toChars ( value )
: StringUTF16 . toChars ( value ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
* Returns a formatted string using the specified format string and
* arguments .
*
* < p > The locale always used is the one returned by { @link
* java . util . Locale # getDefault ( ) Locale . getDefault ( ) } .
*
* @param format
* A < a href = " ../util/Formatter.html#syntax " > format string < / a >
*
* @param args
* Arguments referenced by the format specifiers in the format
* string . If there are more arguments than format specifiers , the
* extra arguments are ignored . The number of arguments is
* variable and may be zero . The maximum number of arguments is
* limited by the maximum dimension of a Java array as defined by
2011-04-13 12:16:13 -07:00
* < cite > The Java & trade ; Virtual Machine Specification < / cite > .
* The behaviour on a
2012-12-28 16:56:54 -05:00
* { @code null } argument depends on the < a
2007-12-01 00:00:00 +00:00
* href = " ../util/Formatter.html#syntax " > conversion < / a > .
*
2012-10-01 15:36:57 +01:00
* @throws java . util . IllegalFormatException
2007-12-01 00:00:00 +00:00
* If a format string contains an illegal syntax , a format
* specifier that is incompatible with the given arguments ,
* insufficient arguments given the format string , or other
* illegal conditions . For specification of all possible
* formatting errors , see the < a
* href = " ../util/Formatter.html#detail " > Details < / a > section of the
* formatter class specification .
*
* @return A formatted string
*
* @see java . util . Formatter
* @since 1 . 5
* /
2012-05-17 10:06:19 -07:00
public static String format ( String format , Object . . . args ) {
2007-12-01 00:00:00 +00:00
return new Formatter ( ) . format ( format , args ) . toString ( ) ;
}
/ * *
* Returns a formatted string using the specified locale , format string ,
* and arguments .
*
* @param l
* The { @linkplain java . util . Locale locale } to apply during
2012-12-28 16:56:54 -05:00
* formatting . If { @code l } is { @code null } then no localization
2007-12-01 00:00:00 +00:00
* is applied .
*
* @param format
* A < a href = " ../util/Formatter.html#syntax " > format string < / a >
*
* @param args
* Arguments referenced by the format specifiers in the format
* string . If there are more arguments than format specifiers , the
* extra arguments are ignored . The number of arguments is
* variable and may be zero . The maximum number of arguments is
* limited by the maximum dimension of a Java array as defined by
2011-04-13 12:16:13 -07:00
* < cite > The Java & trade ; Virtual Machine Specification < / cite > .
* The behaviour on a
2013-01-22 11:14:13 -05:00
* { @code null } argument depends on the
* < a href = " ../util/Formatter.html#syntax " > conversion < / a > .
2007-12-01 00:00:00 +00:00
*
2012-10-01 15:36:57 +01:00
* @throws java . util . IllegalFormatException
2007-12-01 00:00:00 +00:00
* If a format string contains an illegal syntax , a format
* specifier that is incompatible with the given arguments ,
* insufficient arguments given the format string , or other
* illegal conditions . For specification of all possible
* formatting errors , see the < a
* href = " ../util/Formatter.html#detail " > Details < / a > section of the
* formatter class specification
*
* @return A formatted string
*
* @see java . util . Formatter
* @since 1 . 5
* /
2012-05-17 10:06:19 -07:00
public static String format ( Locale l , String format , Object . . . args ) {
2007-12-01 00:00:00 +00:00
return new Formatter ( l ) . format ( format , args ) . toString ( ) ;
}
/ * *
2012-01-23 12:17:30 -08:00
* Returns the string representation of the { @code Object } argument .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* @param obj an { @code Object } .
* @return if the argument is { @code null } , then a string equal to
* { @code " null " } ; otherwise , the value of
* { @code obj . toString ( ) } is returned .
2007-12-01 00:00:00 +00:00
* @see java . lang . Object # toString ( )
* /
public static String valueOf ( Object obj ) {
return ( obj = = null ) ? " null " : obj . toString ( ) ;
}
/ * *
2012-01-23 12:17:30 -08:00
* Returns the string representation of the { @code char } array
2007-12-01 00:00:00 +00:00
* argument . The contents of the character array are copied ; subsequent
2013-11-21 16:02:16 -08:00
* modification of the character array does not affect the returned
* string .
2007-12-01 00:00:00 +00:00
*
2013-11-21 16:02:16 -08:00
* @param data the character array .
* @return a { @code String } that contains the characters of the
* character array .
2007-12-01 00:00:00 +00:00
* /
public static String valueOf ( char data [ ] ) {
return new String ( data ) ;
}
/ * *
* Returns the string representation of a specific subarray of the
2012-01-23 12:17:30 -08:00
* { @code char } array argument .
2007-12-01 00:00:00 +00:00
* < p >
2012-01-23 12:17:30 -08:00
* The { @code offset } argument is the index of the first
* character of the subarray . The { @code count } argument
2007-12-01 00:00:00 +00:00
* specifies the length of the subarray . The contents of the subarray
* are copied ; subsequent modification of the character array does not
2013-11-21 16:02:16 -08:00
* affect the returned string .
2007-12-01 00:00:00 +00:00
*
* @param data the character array .
2013-11-21 16:02:16 -08:00
* @param offset initial offset of the subarray .
* @param count length of the subarray .
* @return a { @code String } that contains the characters of the
* specified subarray of the character array .
2012-01-23 12:17:30 -08:00
* @exception IndexOutOfBoundsException if { @code offset } is
* negative , or { @code count } is negative , or
* { @code offset + count } is larger than
* { @code data . length } .
2007-12-01 00:00:00 +00:00
* /
public static String valueOf ( char data [ ] , int offset , int count ) {
return new String ( data , offset , count ) ;
}
/ * *
2013-11-21 16:02:16 -08:00
* Equivalent to { @link # valueOf ( char [ ] , int , int ) } .
2007-12-01 00:00:00 +00:00
*
* @param data the character array .
* @param offset initial offset of the subarray .
* @param count length of the subarray .
2012-01-23 12:17:30 -08:00
* @return a { @code String } that contains the characters of the
2007-12-01 00:00:00 +00:00
* specified subarray of the character array .
2013-11-21 16:02:16 -08:00
* @exception IndexOutOfBoundsException if { @code offset } is
* negative , or { @code count } is negative , or
* { @code offset + count } is larger than
* { @code data . length } .
2007-12-01 00:00:00 +00:00
* /
public static String copyValueOf ( char data [ ] , int offset , int count ) {
return new String ( data , offset , count ) ;
}
/ * *
2013-11-21 16:02:16 -08:00
* Equivalent to { @link # valueOf ( char [ ] ) } .
2007-12-01 00:00:00 +00:00
*
* @param data the character array .
2012-01-23 12:17:30 -08:00
* @return a { @code String } that contains the characters of the
2007-12-01 00:00:00 +00:00
* character array .
* /
public static String copyValueOf ( char data [ ] ) {
2012-05-17 10:06:19 -07:00
return new String ( data ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2012-01-23 12:17:30 -08:00
* Returns the string representation of the { @code boolean } argument .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* @param b a { @code boolean } .
* @return if the argument is { @code true } , a string equal to
* { @code " true " } is returned ; otherwise , a string equal to
* { @code " false " } is returned .
2007-12-01 00:00:00 +00:00
* /
public static String valueOf ( boolean b ) {
return b ? " true " : " false " ;
}
/ * *
2012-01-23 12:17:30 -08:00
* Returns the string representation of the { @code char }
2007-12-01 00:00:00 +00:00
* argument .
*
2012-01-23 12:17:30 -08:00
* @param c a { @code char } .
* @return a string of length { @code 1 } containing
* as its single character the argument { @code c } .
2007-12-01 00:00:00 +00:00
* /
public static String valueOf ( char c ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( COMPACT_STRINGS & & StringLatin1 . canEncode ( c ) ) {
return new String ( StringLatin1 . toBytes ( c ) , LATIN1 ) ;
}
return new String ( StringUTF16 . toBytes ( c ) , UTF16 ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2012-01-23 12:17:30 -08:00
* Returns the string representation of the { @code int } argument .
2007-12-01 00:00:00 +00:00
* < p >
* The representation is exactly the one returned by the
2012-01-23 12:17:30 -08:00
* { @code Integer . toString } method of one argument .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* @param i an { @code int } .
* @return a string representation of the { @code int } argument .
2007-12-01 00:00:00 +00:00
* @see java . lang . Integer # toString ( int , int )
* /
public static String valueOf ( int i ) {
2009-10-07 14:04:20 -07:00
return Integer . toString ( i ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2012-01-23 12:17:30 -08:00
* Returns the string representation of the { @code long } argument .
2007-12-01 00:00:00 +00:00
* < p >
* The representation is exactly the one returned by the
2012-01-23 12:17:30 -08:00
* { @code Long . toString } method of one argument .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* @param l a { @code long } .
* @return a string representation of the { @code long } argument .
2007-12-01 00:00:00 +00:00
* @see java . lang . Long # toString ( long )
* /
public static String valueOf ( long l ) {
2009-10-07 14:04:20 -07:00
return Long . toString ( l ) ;
2007-12-01 00:00:00 +00:00
}
/ * *
2012-01-23 12:17:30 -08:00
* Returns the string representation of the { @code float } argument .
2007-12-01 00:00:00 +00:00
* < p >
* The representation is exactly the one returned by the
2012-01-23 12:17:30 -08:00
* { @code Float . toString } method of one argument .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* @param f a { @code float } .
* @return a string representation of the { @code float } argument .
2007-12-01 00:00:00 +00:00
* @see java . lang . Float # toString ( float )
* /
public static String valueOf ( float f ) {
return Float . toString ( f ) ;
}
/ * *
2012-01-23 12:17:30 -08:00
* Returns the string representation of the { @code double } argument .
2007-12-01 00:00:00 +00:00
* < p >
* The representation is exactly the one returned by the
2012-01-23 12:17:30 -08:00
* { @code Double . toString } method of one argument .
2007-12-01 00:00:00 +00:00
*
2012-01-23 12:17:30 -08:00
* @param d a { @code double } .
* @return a string representation of the { @code double } argument .
2007-12-01 00:00:00 +00:00
* @see java . lang . Double # toString ( double )
* /
public static String valueOf ( double d ) {
return Double . toString ( d ) ;
}
/ * *
* Returns a canonical representation for the string object .
* < p >
* A pool of strings , initially empty , is maintained privately by the
2012-01-23 12:17:30 -08:00
* class { @ code String } .
2007-12-01 00:00:00 +00:00
* < p >
* When the intern method is invoked , if the pool already contains a
2012-01-23 12:17:30 -08:00
* string equal to this { @code String } object as determined by
2007-12-01 00:00:00 +00:00
* the { @link # equals ( Object ) } method , then the string from the pool is
2012-01-23 12:17:30 -08:00
* returned . Otherwise , this { @code String } object is added to the
* pool and a reference to this { @code String } object is returned .
2007-12-01 00:00:00 +00:00
* < p >
2012-01-23 12:17:30 -08:00
* It follows that for any two strings { @code s } and { @code t } ,
* { @code s . intern ( ) = = t . intern ( ) } is { @code true }
* if and only if { @code s . equals ( t ) } is { @code true } .
2007-12-01 00:00:00 +00:00
* < p >
* All literal strings and string - valued constant expressions are
2011-04-13 12:16:13 -07:00
* interned . String literals are defined in section 3 . 10 . 5 of the
* < cite > The Java & trade ; Language Specification < / cite > .
2007-12-01 00:00:00 +00:00
*
* @return a string that has the same contents as this string , but is
* guaranteed to be from a pool of unique strings .
* /
public native String intern ( ) ;
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
////////////////////////////////////////////////////////////////
/ * *
* Copy character bytes from this string into dst starting at dstBegin .
* This method doesn ' t perform any range checking .
*
* Invoker guarantees : dst is in UTF16 ( inflate itself for asb ) , if two
* coders are different , and dst is big enough ( range check )
*
* @param dstBegin the char index , not offset of byte [ ]
* @param coder the coder of dst [ ]
* /
void getBytes ( byte dst [ ] , int dstBegin , byte coder ) {
if ( coder ( ) = = coder ) {
System . arraycopy ( value , 0 , dst , dstBegin < < coder , value . length ) ;
} else { // this.coder == LATIN && coder == UTF16
StringLatin1 . inflate ( value , 0 , dst , dstBegin , value . length ) ;
}
}
/ *
* Package private constructor . Trailing Void argument is there for
* disambiguating it against other ( public ) constructors .
*
* Stores the char [ ] value into a byte [ ] that each byte represents
* the8 low - order bits of the corresponding character , if the char [ ]
* contains only latin1 character . Or a byte [ ] that stores all
* characters in their byte sequences defined by the { @code StringUTF16 } .
* /
String ( char [ ] value , int off , int len , Void sig ) {
if ( len = = 0 ) {
this . value = " " . value ;
this . coder = " " . coder ;
return ;
}
if ( COMPACT_STRINGS ) {
byte [ ] val = StringUTF16 . compress ( value , off , len ) ;
if ( val ! = null ) {
this . value = val ;
this . coder = LATIN1 ;
return ;
}
}
this . coder = UTF16 ;
this . value = StringUTF16 . toBytes ( value , off , len ) ;
}
/ *
* Package private constructor . Trailing Void argument is there for
* disambiguating it against other ( public ) constructors .
* /
String ( AbstractStringBuilder asb , Void sig ) {
byte [ ] val = asb . getValue ( ) ;
int length = asb . length ( ) ;
if ( asb . isLatin1 ( ) ) {
this . coder = LATIN1 ;
this . value = Arrays . copyOfRange ( val , 0 , length ) ;
} else {
if ( COMPACT_STRINGS ) {
byte [ ] buf = StringUTF16 . compress ( val , 0 , length ) ;
if ( buf ! = null ) {
this . coder = LATIN1 ;
this . value = buf ;
return ;
}
}
this . coder = UTF16 ;
this . value = Arrays . copyOfRange ( val , 0 , length < < 1 ) ;
}
}
/ *
* Package private constructor which shares value array for speed .
* /
String ( byte [ ] value , byte coder ) {
this . value = value ;
this . coder = coder ;
}
byte coder ( ) {
return COMPACT_STRINGS ? coder : UTF16 ;
}
private boolean isLatin1 ( ) {
return COMPACT_STRINGS & & coder = = LATIN1 ;
}
static final byte LATIN1 = 0 ;
static final byte UTF16 = 1 ;
/ *
* StringIndexOutOfBoundsException if { @code index } is
* negative or greater than or equal to { @code length } .
* /
static void checkIndex ( int index , int length ) {
if ( index < 0 | | index > = length ) {
throw new StringIndexOutOfBoundsException ( " index " + index ) ;
}
}
/ *
* StringIndexOutOfBoundsException if { @code offset }
* is negative or greater than { @code length } .
* /
static void checkOffset ( int offset , int length ) {
if ( offset < 0 | | offset > length ) {
throw new StringIndexOutOfBoundsException ( " offset " + offset +
" ,length " + length ) ;
}
}
/ *
* Check { @code offset } , { @code count } against { @code 0 } and { @code length }
* bounds .
*
* @throws StringIndexOutOfBoundsException
* If { @code offset } is negative , { @code count } is negative ,
* or { @code offset } is greater than { @code length - count }
* /
2015-11-27 09:37:33 +01:00
static void checkBoundsOffCount ( int offset , int count , int length ) {
8141132: JEP 254: Compact Strings
Adopt a more space-efficient internal representation for strings.
Co-authored-by: Brent Christian <brent.christian@oracle.com>
Co-authored-by: Vivek Deshpande <vivek.r.deshpande@intel.com>
Co-authored-by: Charlie Hunt <charlie.hunt@oracle.com>
Co-authored-by: Vladimir Kozlov <vladimir.kozlov@oracle.com>
Co-authored-by: Roger Riggs <roger.riggs@oracle.com>
Co-authored-by: Xueming Shen <xueming.shen@oracle.com>
Co-authored-by: Aleksey Shipilev <aleksey.shipilev@oracle.com>
Co-authored-by: Sandhya Viswanathan <sandhya.viswanathan@intel.com>
Reviewed-by: alanb, bdelsart, coleenp, iklam, jiangli, jrose, kevinw, naoto, pliden, roland, smarks, twisti
2015-11-03 09:42:11 +01:00
if ( offset < 0 | | count < 0 | | offset > length - count ) {
throw new StringIndexOutOfBoundsException (
" offset " + offset + " , count " + count + " , length " + length ) ;
}
}
/ *
* Check { @code begin } , { @code end } against { @code 0 } and { @code length }
* bounds .
*
* @throws StringIndexOutOfBoundsException
* If { @code begin } is negative , { @code begin } is greater than
* { @code end } , or { @code end } is greater than { @code length } .
* /
private static void checkBoundsBeginEnd ( int begin , int end , int length ) {
if ( begin < 0 | | begin > end | | end > length ) {
throw new StringIndexOutOfBoundsException (
" begin " + begin + " , end " + end + " , length " + length ) ;
}
}
2007-12-01 00:00:00 +00:00
}