xref: /aosp_15_r20/external/apache-commons-lang/src/site/resources/release-notes/RELEASE-NOTES-3.8.1.txt (revision 455610af95f3bf5f4bc8a9eda520f57e389a4c42)
1
2Licensed to the Apache Software Foundation (ASF) under one or more
3contributor license agreements.  See the NOTICE file distributed with
4this work for additional information regarding copyright ownership.
5The ASF licenses this file to You under the Apache License, Version 2.0
6(the "License"); you may not use this file except in compliance with
7the License.  You may obtain a copy of the License at
8
9http://www.apache.org/licenses/LICENSE-2.0
10
11Unless required by applicable law or agreed to in writing, software
12distributed under the License is distributed on an "AS IS" BASIS,
13WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14See the License for the specific language governing permissions and
15limitations under the License.
16
17=============================================================================
18
19                        Apache Commons Lang
20                            Version 3.8.1
21                           Release Notes
22
23
24INTRODUCTION:
25
26This document contains the release notes for the 3.8.1 version of Apache Commons Lang.
27Commons Lang is a set of utility functions and reusable components that should be of use in any
28Java environment.
29
30Lang 3.0 and onwards now targets Java 7.0, making use of features that arrived with Java 7.0.
31
32For the advice on upgrading from 2.x to 3.x, see the following page:
33
34    https://commons.apache.org/lang/article3_0.html
35
36Apache Commons Lang, a package of Java utility classes for the
37classes that are in java.lang's hierarchy, or are considered to be so
38standard as to justify existence in java.lang.
39
40This release is a bugfix for Restoring Bundle-SymbolicName in the MANIFEST.mf file.
41
42Changes in this version include:
43
44
45Fixed Bugs:
46o LANG-1419: Restore BundleSymbolicName for OSGi
47
48
49
50Historical list of changes: https://commons.apache.org/proper/commons-lang/changes-report.html
51
52For complete information on Apache Commons Lang, including instructions on how to submit bug reports,
53patches, or suggestions for improvement, see the Apache Commons Lang website:
54
55https://commons.apache.org/proper/commons-lang/
56
57=============================================================================
58
59                        Apache Commons Lang
60                            Version 3.8
61                           Release Notes
62
63
64INTRODUCTION:
65
66This document contains the release notes for the 3.8 version of Apache Commons Lang.
67Commons Lang is a set of utility functions and reusable components that should be of use in any
68Java environment.
69
70Lang 3.0 and onwards now targets Java 5.0, making use of features that arrived with Java 5.0 such as generics,
71variable arguments, autoboxing, concurrency and formatted output.
72
73For the advice on upgrading from 2.x to 3.x, see the following page:
74
75    https://commons.apache.org/lang/article3_0.html
76
77Apache Commons Lang, a package of Java utility classes for the
78classes that are in java.lang's hierarchy, or are considered to be so
79standard as to justify existence in java.lang.
80
81New features and bug fixes. Requires Java 7, supports Java 8, 9, 10.
82
83Changes in this version include:
84
85New features:
86o LANG-1352: EnumUtils.getEnumIgnoreCase and isValidEnumIgnoreCase methods added Thanks to Ruslan Sibgatullin.
87o LANG-1372: Add ToStringSummary annotation Thanks to S�rgio Ozaki.
88o LANG-1356: Add bypass option for classes to recursive and reflective EqualsBuilder Thanks to Yathos UG.
89o LANG-1391: Improve Javadoc for StringUtils.isAnyEmpty(null) Thanks to Sauro Matulli, Oleg Chubaryov.
90o LANG-1393: Add API SystemUtils.String getEnvironmentVariable(final String name, final String defaultValue) Thanks to Gary Gregory.
91o LANG-1394: org.apache.commons.lang3.SystemUtils should not write to System.err. Thanks to Sebb, Gary Gregory.
92o LANG-1238: Add RegexUtils class instead of overloading methods in StringUtils that take a regex to take precompiled Pattern. Thanks to Christopher Cordeiro, Gary Gregory, Bruno P. Kinoshita, Oleg Chubaryov.
93o LANG-1390: StringUtils.join() with support for List<?> with configurable start/end indices. Thanks to Jochen Schalanda.
94o LANG-1392: Methods for getting first non empty or non blank value Thanks to Jeff Nelson.
95o LANG-1408: Rounding utilities for converting to BigDecimal
96
97Fixed Bugs:
98o LANG-1380: FastDateParser too strict on abbreviated short month symbols Thanks to Markus Jelsma.
99o LANG-1396: JsonToStringStyle does not escape string names
100o LANG-1395: JsonToStringStyle does not escape double quote in a string value Thanks to Jim Gan.
101o LANG-1384: New Java version ("11") must be handled Thanks to Ian Young.
102o LANG-1364: ExceptionUtils#getRootCause(Throwable t) should return t if no lower level cause exists Thanks to Zheng Xie.
103o LANG-1060: NumberUtils.isNumber assumes number starting with Zero Thanks to Piotr Kosmala.
104o LANG-1375: defaultString(final String str) in StringUtils to reuse defaultString(final String str, final String defaultStr) Thanks to Jerry Zhao.
105o LANG-1374: Parsing Json Array failed Thanks to Jaswanth Bala.
106o LANG-1371: Fix TypeUtils#parameterize to work correctly with narrower-typed array Thanks to Dmitry Ovchinnikov.
107o LANG-1370: Fix EventCountCircuitBreaker increment batch Thanks to Andre Dieb.
108o LANG-1385: NumberUtils.createNumber() throws StringIndexOutOfBoundsException instead of NumberFormatException Thanks to Rohan Padhye.
109o LANG-1397: WordUtils.wrap throws StringIndexOutOfBoundsException when wrapLength is Integer.MAX_VALUE. Thanks to Takanobu Asanuma.
110o LANG-1401: Typo in JavaDoc for lastIndexOf Thanks to Roman Golyshev, Alex Mamedov.
111
112Changes:
113o LANG-1367: ObjectUtils.identityToString(Object) and friends should allocate builders and buffers with a size Thanks to Gary Gregory.
114o LANG-1405: Remove checks for java versions below the minimum supported one Thanks to Lars Grefer.
115o LANG-1402: Null/index safe get methods for ArrayUtils Thanks to Mark Dacek.
116
117=============================================================================
118
119                        Apache Commons Lang
120                            Version 3.7
121                           Release Notes
122
123
124INTRODUCTION:
125
126This document contains the release notes for the 3.7 version of Apache Commons Lang.
127Commons Lang is a set of utility functions and reusable components that should be of use in any
128Java environment.
129
130Lang 3.0 and onwards now targets Java 5.0, making use of features that arrived with Java 5.0 such as generics,
131variable arguments, autoboxing, concurrency and formatted output.
132
133For the advice on upgrading from 2.x to 3.x, see the following page:
134
135    https://commons.apache.org/lang/article3_0.html
136
137Apache Commons Lang, a package of Java utility classes for the
138classes that are in java.lang's hierarchy, or are considered to be so
139standard as to justify existence in java.lang.
140
141New features and bug fixes. Requires Java 7, supports Java 8, 9, 10.
142
143Changes in this version include:
144
145New features:
146o LANG-1355: TimeZone.getTimeZone() in FastDateParser causes resource contention (PR #296.) Thanks to Chas Honton.
147o LANG-1360: Add methods to ObjectUtils to get various forms of class names in a null-safe manner Thanks to Gary Gregory.
148
149Fixed Bugs:
150o LANG-1362: Fix tests DateUtilsTest for Java 9 with en_GB locale Thanks to Stephen Colebourne.
151o LANG-1365: Fix NullPointerException in isJavaVersionAtLeast on Java 10, add SystemUtils.IS_JAVA_10, add JavaVersion.JAVA_10 Thanks to Gary Gregory.
152o LANG-1348: StackOverflowError on TypeUtils.toString(...) for a generic return type of Enum.valueOf Thanks to mbusso.
153o LANG-1350: ConstructorUtils.invokeConstructor(Class, Object...) regression Thanks to Brett Kail.
154o LANG-1349: EqualsBuilder#isRegistered: swappedPair construction bug Thanks to Naman Nigam.
155o LANG-1357: org.apache.commons.lang3.time.FastDateParser should use toUpperCase(Locale) Thanks to BruceKuiLiu.
156
157Changes:
158o LANG-1358: Improve StringUtils#replace throughput Thanks to Stephane Landelle.
159o LANG-1346: Remove deprecation from RandomStringUtils
160o LANG-1361: ExceptionUtils.getThrowableList() is using deprecated ExceptionUtils.getCause() Thanks to Ana.
161
162
163=============================================================================
164
165                           Apache Commons Lang
166                               Version 3.6
167                              Release Notes
168
169
170INTRODUCTION:
171
172This document contains the release notes for the 3.6 version of
173Apache Commons Lang as well as a history all changes in the Commons Lang 3.x
174release line. Commons Lang is a set of utility functions and reusable
175components that should be of use in any Java environment. Commons Lang 3.6 at
176least requires Java 7.0. Note that this has changed from Commons Lang 3.5, which
177only required Java 1.6.
178
179For the advice on upgrading from 2.x to 3.x, see the following page:
180
181    https://commons.apache.org/lang/article3_0.html
182
183HIGHLIGHTS
184==========
185
186Some of the highlights in this release include:
187
188o The class org.apache.commons.lang3.concurrent.Memoizer is an implementation
189    of the Memoizer pattern as shown in
190    Goetz, Brian et al. (2006) - Java Concurrency in Practice, p. 108.
191o The class org.apache.commons.lang3.ArchUtils has been added. ArchUtils is
192    a utility class for the "os.arch" system property.
193
194DEPRECATIONS
195============
196
197The Apache Commons Community has recently set up the Commons Text component
198as a home for algorithms working on strings. For this reason most of the string
199focused functionality in Commons Lang has been deprecated and moved to
200Commons Text. This includes:
201
202o All classes in the org.apache.commons.lang3.text and the
203    org.apache.commons.lang3.text.translate packages
204o org.apache.commons.lang3.StringEscapeUtils
205o org.apache.commons.lang3.RandomStringUtils
206o The methods org.apache.commons.lang3.StringUtils.getJaroWinklerDistance and
207    org.apache.commons.lang3.StringUtils.getLevenshteinDistance
208
209For more information see the Commons Text website:
210
211    https://commons.apache.org/text
212
213The class org.apache.commons.lang3.CharEncoding has been deprecated in favor of
214java.nio.charset.StandardCharsets.
215
216The following methods have been deprecated in
217org.apache.commons.lang3.ArrayUtils in favor of the corresponding insert
218methods. Note that the handling for null inputs differs between add and insert.
219
220o add(boolean[], int, boolean) -> insert(int, boolean[], boolean...)
221o add(byte[], int, boolean)    -> insert(int, byte[], byte...)
222o add(char[], int, boolean)    -> insert(int, char[], char...)
223o add(double[], int, boolean)  -> insert(int, double[], double...)
224o add(float[], int, boolean)   -> insert(int, float[], float...)
225o add(int[], int, boolean)     -> insert(int, int[], int...)
226o add(long[], int, boolean)    -> insert(int, long[], long...)
227o add(short[], int, boolean)   -> insert(int, short[], short...)
228o add(T[], int, boolean)       -> insert(int, T[], T...)
229
230
231COMPATIBILITY WITH JAVA 9
232==================
233
234The MANIFEST.MF now contains an additional entry:
235
236  Automatic-Module-Name: org.apache.commons.lang3
237
238This should make it possible to use Commons Lang 3.6 as a module in the Java 9
239module system. For more information see the corresponding issue and the
240referenced mailing list discussions:
241
242    https://issues.apache.org/jira/browse/LANG-1338
243
244The build problems present in the 3.5 release have been resolved. Building
245Commons Lang 3.6 should work out of the box with the latest Java 9 EA build.
246Please report any Java 9 related issues at:
247
248    https://issues.apache.org/jira/browse/LANG
249
250NEW FEATURES
251============
252
253o LANG-1336: Add NUL Byte To CharUtils. Thanks to Beluga Behr.
254o LANG-1304: Add method in StringUtils to determine if string contains both
255             mixed cased characters. Thanks to Andy Klimczak.
256o LANG-1325: Increase test coverage of ToStringBuilder class to 100%.
257             Thanks to Arshad Basha.
258o LANG-1307: Add a method in StringUtils to extract only digits out of input
259             string. Thanks to Arshad Basha.
260o LANG-1256: Add JMH maven dependencies. Thanks to C0rWin.
261o LANG-1167: Add null filter to ReflectionToStringBuilder.
262             Thanks to Mark Dacek.
263o LANG-1299: Add method for converting string to an array of code points.
264o LANG-660:  Add methods to insert arrays into arrays at an index.
265o LANG-1034: Add support for recursive comparison to
266             EqualsBuilder#reflectionEquals. Thanks to Yathos UG.
267o LANG-1067: Add a reflection-based variant of DiffBuilder.
268o LANG-740:  Implementation of a Memoizer. Thanks to James Sawle.
269o LANG-1258: Add ArrayUtils#toStringArray method.
270             Thanks to IG, Grzegorz Ro?niecki.
271o LANG-1160: StringUtils#abbreviate should support 'custom ellipses' parameter.
272o LANG-1293: Add StringUtils#isAllEmpty and #isAllBlank methods.
273             Thanks to Pierre Templier, Martin Tarjanyi.
274o LANG-1313: Add ArchUtils - An utility class for the "os.arch" system property.
275             Thanks to Tomschi.
276o LANG-1272: Add shuffle methods to ArrayUtils.
277o LANG-1317: Add MethodUtils#findAnnotation and extend
278             MethodUtils#getMethodsWithAnnotation for non-public, super-class
279             and interface methods. Thanks to Yasser Zamani.
280o LANG-1331: Add ImmutablePair.nullPair().
281o LANG-1332: Add ImmutableTriple.nullTriple().
282
283FIXED BUGS
284==========
285
286o LANG-1337: Fix test failures in IBM JDK 8 for ToStringBuilderTest.
287o LANG-1319: MultilineRecursiveToStringStyle StackOverflowError when object is
288             an array.
289o LANG-1320: LocaleUtils#toLocale does not support language followed by UN M.49
290             numeric-3 area code followed by variant.
291o LANG-1300: Clarify or improve behavior of int-based indexOf methods in
292             StringUtils. Thanks to Mark Dacek.
293o LANG-1286: RandomStringUtils random method can overflow and return characters
294             outside of specified range.
295o LANG-1292: WordUtils.wrap throws StringIndexOutOfBoundsException.
296o LANG-1287: RandomStringUtils#random can enter infinite loop if end parameter
297             is to small. Thanks to Ivan Morozov.
298o LANG-1285: NullPointerException in FastDateParser$TimeZoneStrategy.
299             Thanks to Francesco Chicchiricc�.
300o LANG-1281: Javadoc of StringUtils.ordinalIndexOf is contradictory.
301             Thanks to Andreas Lundblad.
302o LANG-1188: StringUtils#join(T...): warning: [unchecked] Possible heap
303             pollution from parameterized vararg type T.
304o LANG-1144: Multiple calls of
305             org.apache.commons.lang3.concurrent.LazyInitializer.initialize()
306             are possible. Thanks to Waldemar Maier, Gary Gregory.
307o LANG-1276: StrBuilder#replaceAll ArrayIndexOutOfBoundsException.
308             Thanks to Andy Klimczak.
309o LANG-1278: BooleanUtils javadoc issues. Thanks to Duke Yin.
310o LANG-1070: ArrayUtils#add confusing example in javadoc.
311             Thanks to Paul Pogonyshev.
312o LANG-1271: StringUtils#isAnyEmpty and #isAnyBlank should return false for an
313             empty array. Thanks to Pierre Templier.
314o LANG-1155: Add StringUtils#unwrap. Thanks to Saif Asif, Thiago Andrade.
315o LANG-1311: TypeUtils.toString() doesn't handle primitive and Object arrays
316             correctly. Thanks to Aaron Digulla.
317o LANG-1312: LocaleUtils#toLocale does not support language followed by UN M.49
318             numeric-3 area code.
319o LANG-1265: Build failures when building with Java 9 EA.
320o LANG-1314: javadoc creation broken with Java 8. Thanks to Allon Murienik.
321o LANG-1310: MethodUtils.invokeMethod throws ArrayStoreException if using
322             varargs arguments and smaller types than the method defines.
323             Thanks to Don Jeba.
324
325CHANGES
326=======
327
328o LANG-1338: Add Automatic-Module-Name MANIFEST entry for Java 9
329             compatibility.
330o LANG-1334: Deprecate CharEncoding in favour of
331             java.nio.charset.StandardCharsets.
332o LANG-1110: Implement HashSetvBitSetTest using JMH.
333             Thanks to Bruno P. Kinoshita.
334o LANG-1290: Increase test coverage of org.apache.commons.lang3.ArrayUtils.
335             Thanks to Andrii Abramov.
336o LANG-1274: StrSubstitutor should state its thread safety.
337o LANG-1277: StringUtils#getLevenshteinDistance reduce memory consumption.
338             Thanks to yufcuy.
339o LANG-1279: Update Java requirement from Java 6 to 7.
340o LANG-1143: StringUtils should use toXxxxCase(int) rather than
341             toXxxxCase(char). Thanks to sebb.
342o LANG-1297: Add SystemUtils.getHostName() API.
343o LANG-1301: Moving apache-rat-plugin configuration into pluginManagement.
344             Thanks to Karl Heinz Marbaise.
345o LANG-1316: Deprecate classes/methods moved to commons-text.
346
347=============================================================================
348
349                        Release Notes for version 3.5
350
351
352HIGHLIGHTS
353==========
354
355Some of the highlights in this release include:
356
357o Added Java 9 detection to org.apache.commons.lang3.SystemUtils.
358o Support for shifting and swapping elements in
359    org.apache.commons.lang3.ArrayUtils.
360o New methods for generating random strings from different character classes
361    including alphabetic, alpha-numeric and ASCII added to
362    org.apache.commons.lang3.RandomStringUtils.
363o Numerous extensions to org.apache.commons.lang3.StringUtils including
364    null safe compare variants, more remove and replace variants, rotation and
365    truncation.
366o Added org.apache.commons.lang3.ThreadUtils - a utility class to work with
367    instances of java.lang.Thread and java.lang.ThreadGroup.
368o Added annotations @EqualsExclude, @HashCodeExclude and @ToStringExclude to
369    mark fields which should be ignored by the reflective builders in the
370    org.apache.commons.lang3.builder package.
371o Support for various modify and retrieve value use cases added to the classes
372    in org.apache.commons.lang3.mutable.
373
374COMPATIBILITY
375=============
376
377Apache Commons Lang 3.5 is binary compatible with the 3.4 release. Users
378should not experience any problems when upgrading from 3.4 to 3.5.
379
380There has been an addition to the org.apache.commons.lang3.time.DatePrinter
381interface:
382
383o Added method 'public boolean parse(java.lang.String, java.text.ParsePosition,
384    java.util.Calendar)'
385o Added method 'public java.lang.Appendable format(long, java.lang.Appendable)'
386o Added method 'public java.lang.Appendable format(java.util.Date,
387    java.lang.Appendable)'
388o Added method 'public java.lang.Appendable format(java.util.Calendar,
389    java.lang.Appendable)'
390
391For this reason 3.5 is not strictly source compatible to 3.4. Since the
392DatePrinter interface is not meant to be implemented by clients, this
393change it not considered to cause any problems.
394
395JAVA 9 SUPPORT
396==============
397
398Java 9 introduces a new version-string scheme. Details of this new scheme are
399documented in JEP-223 (https://openjdk.org/jeps/223). In order to support
400JEP-223 two classes had to be changed:
401
402o org.apache.commons.lang3.JavaVersion
403    deprecated enum constant JAVA_1_9
404    introduced enum constant JAVA_9
405
406o org.apache.commons.lang3.SystemUtils
407    deprecated constant IS_JAVA_1_9
408    introduced constant IS_JAVA_9
409
410For more information see LANG-1197
411(https://issues.apache.org/jira/browse/LANG-1197). All other APIs are expected
412to work with Java 9.
413
414BUILDING ON JAVA 9
415==================
416
417Java 8 introduced the Unicode Consortium's Common Locale Data Repository as
418alternative source for locale data. Java 9 will use the CLDR provider as
419default provider for locale data (see https://openjdk.org/jeps/252). This
420causes an number of locale-sensitive test in Commons Lang to fail. In order
421to build Commons Lang 3.5 on Java 9, the locale provider has to be set to
422'JRE':
423
424    mvn -Djava.locale.providers=JRE clean install
425
426We are currently investigating ways to support building on Java 9 without
427further configuration. For more information see:
428https://issues.apache.org/jira/browse/LANG-1265
429
430
431NEW FEATURES
432==============
433
434o LANG-1275: Added a tryAcquire() method to TimedSemaphore.
435o LANG-1255: Add DateUtils.toCalendar(Date, TimeZone). Thanks to Kaiyuan Wang.
436o LANG-1023: Add WordUtils.wrap overload with customizable breakable character.
437             Thanks to Marko Bekhta.
438o LANG-787:  Add method removeIgnoreCase(String, String) to StringUtils. Thanks
439             to Gokul Nanthakumar C.
440o LANG-1224: Extend RandomStringUtils with methods that generate strings
441             between a min and max length. Thanks to Caleb Cushing.
442o LANG-1257: Add APIs StringUtils.wrapIfMissing(String, char|String). Thanks to
443             Gary Gregory.
444o LANG-1253: Add RandomUtils#nextBoolean() method. Thanks to adilek.
445o LANG-1085: Add a circuit breaker implementation. Thanks to Oliver Heger and
446             Bruno P. Kinoshita.
447o LANG-1013: Add StringUtils.truncate(). Thanks to Thiago Andrade.
448o LANG-1195: Enhance MethodUtils to allow invocation of private methods. Thanks
449             to Derek C. Ashmore.
450o LANG-1189: Add getAndIncrement/getAndDecrement/getAndAdd/incrementAndGet/
451             decrementAndGet/addAndGet in Mutable* classes. Thanks to
452             Haiyang Li and Matthew Bartenschlag.
453o LANG-1225: Add RandomStringUtils#randomGraph and #randomPrint which match
454             corresponding regular expression class. Thanks to Caleb Cushing.
455o LANG-1223: Add StopWatch#getTime(TimeUnit). Thanks to Nick Manley.
456o LANG-781:  Add methods to ObjectUtils class to check for null elements in the
457             array. Thanks to Krzysztof Wolny.
458o LANG-1228: Prefer Throwable.getCause() in ExceptionUtils.getCause().
459             Thanks to Brad Hess.
460o LANG-1233: DiffBuilder add method to allow appending from a DiffResult.
461             Thanks to Nick Manley.
462o LANG-1168: Add SystemUtils.IS_OS_WINDOWS_10 property.
463             Thanks to Pascal Schumacher.
464o LANG-1115: Add support for varargs in ConstructorUtils, MemberUtils, and
465             MethodUtils. Thanks to Jim Lloyd and Joe Ferner.
466o LANG-1134: Add methods to check numbers against NaN and infinite to
467             Validate. Thanks to Alan Smithee.
468o LANG-1220: Add tests for missed branches in DateUtils.
469             Thanks to Casey Scarborough.
470o LANG-1146: z/OS identification in SystemUtils.
471             Thanks to Gabor Liptak.
472o LANG-1192: FastDateFormat support of the week-year component (uppercase 'Y').
473             Thanks to Dominik Stadler.
474o LANG-1169: Add StringUtils methods to compare a string to multiple strings.
475             Thanks to Rafal Glowinski, Robert Parr and Arman Sharif.
476o LANG-1185: Add remove by regular expression methods in StringUtils.
477o LANG-1139: Add replace by regular expression methods in StringUtils.
478o LANG-1171: Add compare methods in StringUtils.
479o LANG-1174: Add sugar to RandomUtils. Thanks to Punkratz312.
480o LANG-1154: FastDateFormat APIs that use a StringBuilder. Thanks to
481             Gary Gregory.
482o LANG-1149: Ability to throw checked exceptions without declaring them. Thanks
483             to Gregory Zak.
484o LANG-1153: Implement ParsePosition api for FastDateParser.
485o LANG-1137: Add check for duplicate event listener in EventListenerSupport.
486             Thanks to Matthew Aguirre.
487o LANG-1135: Add method containsAllWords to WordUtils. Thanks to
488             Eduardo Martins.
489o LANG-1132: ReflectionToStringBuilder doesn't throw IllegalArgumentException
490             when the constructor's object param is null. Thanks to Jack Tan.
491o LANG-701:  StringUtils join with var args. Thanks to James Sawle.
492o LANG-1105: Add ThreadUtils - A utility class which provides helper methods
493             related to java.lang.Thread  Issue: LANG-1105. Thanks to
494             Hendrik Saly.
495o LANG-1031: Add annotations to exclude fields from ReflectionEqualsBuilder,
496             ReflectionToStringBuilder and ReflectionHashCodeBuilder. Thanks
497             to Felipe Adorno.
498o LANG-1127: Use JUnit rules to set and reset the default Locale and TimeZone.
499o LANG-1119: Add rotate(string, int) method to StringUtils. Thanks to
500             Loic Guibert.
501o LANG-1099: Add swap and shift operations for arrays to ArrayUtils. Thanks to
502             Adrian Ber.
503o LANG-1050: Change nullToEmpty methods to generics. Thanks to James Sawle.
504o LANG-1074: Add a method to ArrayUtils for removing all occurrences of a given
505             element  Issue: LANG-1074. Thanks to Haiyang Li.
506
507FIXED BUGS
508============
509
510o LANG-1261: ArrayUtils.contains returns false for instances of subtypes.
511o LANG-1252: Rename NumberUtils.isNumber, isCreatable to better reflect
512             createNumber. Also, accommodated for "+" symbol as prefix in
513             isCreatable and isNumber. Thanks to Rob Tompkins.
514o LANG-1230: Remove unnecessary synchronization from registry lookup in
515             EqualsBuilder and HashCodeBuilder. Thanks to Philippe Marschall.
516o LANG-1214: Handle "void" in ClassUtils.getClass(). Thanks to Henry Tung.
517o LANG-1250: SerializationUtils#deserialize has unnecessary code and a comment
518             for that. Thanks to Glease Wang.
519o LANG-1190: TypeUtils.isAssignable throws NullPointerException when fromType
520             has type variables and toType generic superclass specifies type
521             variable. Thanks to Pascal Schumacher.
522o LANG-1226: StringUtils#normalizeSpace does not trim the string anymore.
523             Thanks to Pascal Schumacher.
524o LANG-1251: SerializationUtils.ClassLoaderAwareObjectInputStream should use
525             static initializer to initialize primitiveTypes map. Thanks to
526             Takuya Ueshin.
527o LANG-1248: FastDatePrinter Memory allocation regression. Thanks to
528             Benoit Wiart.
529o LANG-1018: Fix precision loss on NumberUtils.createNumber(String). Thanks to
530             Nick Manley.
531o LANG-1199: Fix implementation of StringUtils.getJaroWinklerDistance(). Thanks
532             to M. Steiger.
533o LANG-1244: Fix dead links in StringUtils.getLevenshteinDistance() javadoc.
534             Thanks to jjbankert.
535o LANG-1242: "\u2284":"?" mapping missing from
536             EntityArrays#HTML40_EXTENDED_ESCAPE. Thanks to Neal Stewart.
537o LANG-901:  StringUtils#startsWithAny/endsWithAny is case sensitive -
538             documented as case insensitive. Thanks to Matthew Bartenschlag.
539o LANG-1232: DiffBuilder: Add null check on fieldName when appending Object or
540             Object[]. Thanks to Nick Manley.
541o LANG-1178: ArrayUtils.removeAll(Object array, int... indices) should do the
542             clone, not its callers. Thanks to Henri Yandell.
543o LANG-1120: StringUtils.stripAccents should remove accents from "?" and "?".
544             Thanks to kaching88.
545o LANG-1205: NumberUtils.createNumber() behaves inconsistently with
546             NumberUtils.isNumber(). Thanks to pbrose.
547o LANG-1222: Fix for incorrect comment on StringUtils.containsIgnoreCase
548             method. Thanks to Adam J.
549o LANG-1221: Fix typo on appendIfMissing javadoc. Thanks to Pierre Templier.
550o LANG-1202: parseDateStrictly doesn't pass specified locale. Thanks to
551             Markus Jelsma.
552o LANG-1219: FastDateFormat doesn't respect summer daylight in some localized
553             strings. Thanks to Jarek.
554o LANG-1175: Remove Ant-based build.
555o LANG-1194: Limit max heap memory for consistent Travis CI build.
556o LANG-1186: Fix NullPointerException in FastDateParser$TimeZoneStrategy.
557             Thanks to NickManley.
558o LANG-1193: ordinalIndexOf("abc", "ab", 1) gives incorrect answer of -1
559             (correct answer should be 0); revert fix for LANG-1077. Thanks to
560             Qin Li.
561o LANG-1002: Several predefined ISO FastDateFormats in DateFormatUtils are
562             incorrect. Thanks to Michael Osipov.
563o LANG-1152: StringIndexOutOfBoundsException or field over-write for large year
564             fields in FastDateParser. Thanks to Pas Filip.
565o LANG-1141: StrLookup.systemPropertiesLookup() no longer reacts on changes on
566             system properties.
567o LANG-1147: EnumUtils *BitVector issue with more than 32 values Enum. Thanks
568             to Loic Guibert.
569o LANG-1059: Capitalize javadoc is incorrect. Thanks to Colin Casey.
570o LANG-1122: Inconsistent behavior of swap for malformed inputs. Thanks to
571             Adrian Ber.
572o LANG-1130: Fix critical issues reported by SonarQube.
573o LANG-1131: StrBuilder.equals(StrBuilder) doesn't check for null inputs.
574o LANG-1128: JsonToStringStyle doesn't handle chars and objects correctly.
575             Thanks to Jack Tan.
576o LANG-1126: DateFormatUtilsTest.testSMTP depends on the default Locale.
577o LANG-1123: Unit test FastDatePrinterTimeZonesTest needs a timezone set.
578             Thanks to Christian P. Momon.
579o LANG-916:  DateFormatUtils.format does not correctly change Calendar
580             TimeZone in certain situations. Thanks to Christian P. Momon.
581o LANG-1116: DateUtilsTest.testLang530 fails for some timezones. Thanks to
582             Aaron Sheldon.
583o LANG-1114: TypeUtils.ParameterizedType#equals doesn't work with wildcard
584             types. Thanks to Andy Coates.
585o LANG-1118: StringUtils.repeat('z', -1) throws NegativeArraySizeException.
586             Thanks to Loic Guibert.
587o LANG-1111: Fix FindBugs warnings in DurationFormatUtils.
588o LANG-1162: StringUtils#equals fails with Index OOBE on non-Strings with
589             identical leading prefix..
590o LANG-1163: There are no tests for CharSequenceUtils.regionMatches.
591o LANG-1200: Fix Javadoc of StringUtils.ordinalIndexOf. Thanks to BarkZhang.
592o LANG-1191: Incorrect Javadoc
593             StringUtils.containsAny(CharSequence, CharSequence...). Thanks to
594             qed, Brent Worden and Gary Gregory.
595
596CHANGES
597=========
598o LANG-1197: Prepare Java 9 detection.
599o LANG-1262: CompareToBuilder.append(Object, Object, Comparator) method is too
600             big to be inlined. Thanks to Ruslan Cheremin.
601o LANG-1259: Javadoc for ArrayUtils.isNotEmpty() is slightly misleading. Thanks
602             to Dominik Stadler.
603o LANG-1247: FastDatePrinter generates extra Date objects. Thanks to
604             Benoit Wiart.
605o LANG-1229: HashCodeBuilder.append(Object,Object) is too big to be inlined,
606             which prevents whole builder to be scalarized. Thanks to
607             Ruslan Cheremin.
608o LANG-1243: Simplify ArrayUtils removeElements by using new decrementAndGet()
609             method.
610o LANG-1240: Optimize BitField constructor implementation. Thanks to zhanhb.
611o LANG-1206: Improve CharSetUtils.squeeze() performance. Thanks to
612             Mohammed Alfallaj.
613o LANG-1176: Improve ArrayUtils removeElements time complexity to O(n). Thanks
614             to Jeffery Yuan.
615o LANG-1234: getLevenshteinDistance with a threshold: optimize implementation
616             if the strings lengths differ more than the threshold. Thanks to
617             Jonatan J�nsson.
618o LANG-1151: Performance improvements for NumberUtils.isParsable. Thanks to
619             Juan Pablo Santos Rodr�guez.
620o LANG-1218: EqualsBuilder.append(Object,Object) is too big to be inlined,
621             which prevents whole builder to be scalarized. Thanks to
622             Ruslan Cheremin.
623o LANG-1210: StringUtils#startsWithAny has error in Javadoc. Thanks to
624             Matthias Niehoff.
625o LANG-1208: StrSubstitutor can preserve escapes. Thanks to Samuel Karp.
626o LANG-1182: Clarify Javadoc of StringUtils.containsAny(). Thanks to
627             Larry West and Pascal Schumacher.
628o LANG-1183: Making replacePattern/removePattern methods null safe in
629             StringUtils.
630o LANG-1057: Replace StringBuilder with String concatenation for better
631             optimization. Thanks to Ot�vio Santana.
632o LANG-1075: Deprecate SystemUtils.FILE_SEPARATOR and
633             SystemUtils.PATH_SEPARATOR.
634o LANG-979:  TypeUtils.parameterizeWithOwner - wrong format descriptor for
635             "invalid number of type parameters". Thanks to Bruno P. Kinoshita.
636o LANG-1112: MultilineRecursiveToStringStyle largely unusable due to being
637             package-private.
638o LANG-1058: StringUtils.uncapitalize performance improvement. Thanks to
639             Leo Wang.
640o LANG-1069: CharSet.getInstance documentation does not clearly explain how
641             to include negation character in set. Thanks to Arno Noordover.
642o LANG-1107: Fix parsing edge cases in FastDateParser.
643o LANG-1273: Added new property IS_OS_MAC_OSX_EL_CAPITAN in SystemUtils. Thanks
644             to Jake Wang.
645
646=============================================================================
647
648                        Release Notes for version 3.4
649
650
651COMPATIBILITY
652=============
653
654Commons Lang 3.4 is fully binary compatible to the last release and can
655therefore be used as a drop in replacement for 3.3.2. Note that the value of
656org.apache.commons.lang3.time.DurationFormatUtils.ISO_EXTENDED_FORMAT_PATTERN
657has changed, which may affect clients using the constant. Furthermore the
658constant is used internally in
659o DurationFormatUtils.formatDurationISO(long)
660o DurationFormatUtils.formatPeriodISO(long, long)
661
662For more information see https://issues.apache.org/jira/browse/LANG-1000.
663
664NEW FEATURES
665==============
666
667o LANG-821:  Support OS X versions in SystemUtils. Thanks to Timo Kockert.
668o LANG-1103: Add SystemUtils.IS_JAVA_1_9
669o LANG-1093: Add ClassUtils.getAbbreviatedName(). Thanks to Fabian Lange.
670o LANG-1082: Add option to disable the "objectsTriviallyEqual" test in
671             DiffBuilder. Thanks to Jonathan Baker.
672o LANG-1015: Add JsonToStringStyle implementation to ToStringStyle. Thanks to
673             Thiago Andrade.
674o LANG-1080: Add NoClassNameToStringStyle implementation of ToStringStyle.
675             Thanks to Innokenty Shuvalov.
676o LANG-883:  Add StringUtils.containsAny(CharSequence, CharSequence...) method.
677             Thanks to Daniel Stewart.
678o LANG-1052: Multiline recursive to string style. Thanks to Jan Mat�rne.
679o LANG-536:  Add isSorted() to ArrayUtils. Thanks to James Sawle.
680o LANG-1033: Add StringUtils.countMatches(CharSequence, char)
681o LANG-1021: Provide methods to retrieve all fields/methods annotated with a
682             specific type. Thanks to Alexander M�ller.
683o LANG-1016: NumberUtils#isParsable method(s). Thanks to
684             Juan Pablo Santos Rodr�guez.
685o LANG-999:  Add fuzzy String matching logic to StringUtils. Thanks to
686             Ben Ripkens.
687o LANG-994:  Add zero copy read method to StrBuilder. Thanks to
688             Mikhail Mazursky.
689o LANG-993:  Add zero copy write method to StrBuilder. Thanks to
690             Mikhail Mazursky.
691o LANG-1044: Add method MethodUtils.invokeExactMethod(Object, String)
692o LANG-1045: Add method MethodUtils.invokeMethod(Object, String)
693
694FIXED BUGS
695============
696
697o LANG-794:  SystemUtils.IS_OS_WINDOWS_2008, VISTA are incorrect. Thanks to
698             Timo Kockert.
699o LANG-1104: Parse test fails for TimeZone America/Sao_Paulo
700o LANG-948:  Exception while using ExtendedMessageFormat and escaping braces.
701             Thanks to Andrey Khobnya.
702o LANG-1092: Wrong formatting of time zones with daylight saving time in
703             FastDatePrinter
704o LANG-1090: FastDateParser does not set error indication in ParsePosition
705o LANG-1089: FastDateParser does not handle excess hours as per
706             SimpleDateFormat
707o LANG-1061: FastDateParser error - timezones not handled correctly. Thanks to
708             dmeneses.
709o LANG-1087: NumberUtils#createNumber() returns positive BigDecimal when
710             negative Float is expected. Thanks to Renat Zhilkibaev.
711o LANG-1081: DiffBuilder.append(String, Object left, Object right) does not do
712             a left.equals(right) check. Thanks to Jonathan Baker.
713o LANG-1055: StrSubstitutor.replaceSystemProperties does not work consistently.
714             Thanks to Jonathan Baker.
715o LANG-1083: Add (T) casts to get unit tests to pass in old JDK. Thanks to
716             Jonathan Baker.
717o LANG-1073: Read wrong component type of array in add in ArrayUtils.
718             Thanks to haiyang li.
719o LANG-1077: StringUtils.ordinalIndexOf("aaaaaa", "aa", 2) != 3 in StringUtils.
720             Thanks to haiyang li.
721o LANG-1072: Duplicated "0x" check in createBigInteger in NumberUtils. Thanks
722             to haiyang li.
723o LANG-1064: StringUtils.abbreviate description doesn't agree with the
724             examples. Thanks to B.J. Herbison.
725o LANG-1041: Fix MethodUtilsTest so it does not depend on JDK method ordering.
726             Thanks to Alexandre Bartel.
727o LANG-1000: ParseException when trying to parse UTC dates with Z as zone
728             designator using DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT
729o LANG-1035: Javadoc for EqualsBuilder.reflectionEquals() is unclear
730o LANG-1001: ISO 8601 misspelled throughout the Javadocs. Thanks to
731             Michael Osipov.
732o LANG-1088: FastDateParser should be case insensitive
733o LANG-995:  Fix bug with stripping spaces on last line in WordUtils.wrap().
734             Thanks to Andrey Khobnya.
735
736CHANGES
737=========
738
739o LANG-1102: Make logic for comparing OS versions in SystemUtils smarter
740o LANG-1091: Shutdown thread pools in test cases. Thanks to Fabian Lange.
741o LANG-1101: FastDateParser and FastDatePrinter support 'X' format
742o LANG-1100: Avoid memory allocation when using date formatting to StringBuffer.
743             Thanks to mbracher.
744o LANG-935:  Possible performance improvement on string escape functions.
745             Thanks to Fabian Lange, Thomas Neidhart.
746o LANG-1098: Avoid String allocation in StrBuilder.append(CharSequence). Thanks
747             to Mikhail Mazurskiy, Fabian Lange.
748o LANG-1098: Update maven-checkstyle-plugin to 2.14. Thanks to Micha? Kordas.
749o LANG-1097: Update org.easymock:easymock to 3.3.1. Thanks to Micha? Kordas.
750o LANG-1096: Update maven-pmd-plugin to 3.4. Thanks to Micha? Kordas.
751o LANG-1095: Update maven-antrun-plugin to 1.8. Thanks to Micha? Kordas.
752o LANG-877:  Performance improvements for StringEscapeUtils. Thanks to
753             Fabian Lange.
754o LANG-1071: Fix wrong examples in Javadoc of
755             StringUtils.replaceEachRepeatedly(...),
756             StringUtils.replaceEach(...) Thanks to Arno Noordover.
757o LANG-827:  CompareToBuilder's doc doesn't specify precedence of fields it
758             uses in performing comparisons
759o LANG-1020: Improve performance of normalize space. Thanks to Libor Ondrusek.
760o LANG-1027: org.apache.commons.lang3.SystemUtils#isJavaVersionAtLeast should
761             return true by default
762o LANG-1026: Bring static method references in StringUtils to consistent style.
763             Thanks to Alex Yursha.
764o LANG-1017: Use non-ASCII digits in Javadoc examples for
765             StringUtils.isNumeric. Thanks to Christoph Schneegans.
766o LANG-1008: Change min/max methods in NumberUtils/IEEE754rUtils from array
767             input parameters to varargs. Thanks to Thiago Andrade.
768o LANG-1006: Add wrap (with String or char) to StringUtils. Thanks to
769             Thiago Andrade.
770o LANG-1005: Extend DurationFormatUtils#formatDurationISO default pattern to
771             match #formatDurationHMS. Thanks to Michael Osipov.
772o LANG-1007: Fixing NumberUtils JAVADoc comments for max methods. Thanks to
773             Thiago Andrade.
774o LANG-731:  Better Javadoc for BitField class
775o LANG-1004: DurationFormatUtils#formatDurationHMS implementation does not
776             correspond to Javadoc and vice versa. Thanks to Michael Osipov.
777o LANG-1003: DurationFormatUtils are not able to handle negative
778             durations/periods
779o LANG-998:  Javadoc is not clear on preferred pattern to instantiate
780             FastDateParser / FastDatePrinter
781
782=============================================================================
783
784                        Release Notes for version 3.3.2
785
786NEW FEATURES
787==============
788
789o LANG-989:  Add org.apache.commons.lang3.SystemUtils.IS_JAVA_1_8
790
791FIXED BUGS
792============
793
794o LANG-992:  NumberUtils#isNumber() returns false for "0.0", "0.4790", et al
795
796=============================================================================
797
798                        Release Notes for version 3.3.1
799
800FIXED BUGS
801============
802
803o LANG-987:  DateUtils.getFragmentInDays(Date, Calendar.MONTH) returns wrong
804             days
805o LANG-983:  DurationFormatUtils does not describe format string fully
806o LANG-981:  DurationFormatUtils#lexx does not detect unmatched quote char
807o LANG-984:  DurationFormatUtils does not handle large durations correctly
808o LANG-982:  DurationFormatUtils.formatDuration(61999, "s.SSSS") - ms field
809             size should be 4 digits
810o LANG-978:  Failing tests with Java 8 b128
811
812=============================================================================
813
814                        Release Notes for version 3.3
815
816NEW FEATURES
817==============
818
819o LANG-955:  Add methods for removing all invalid characters according to
820             XML 1.0 and XML 1.1 in an input string to StringEscapeUtils.
821             Thanks to Adam Hooper.
822o LANG-970:  Add APIs MutableBoolean setTrue() and setFalse()
823o LANG-962:  Add SerializationUtils.roundtrip(T extends Serializable) to
824             serialize then deserialize
825o LANG-637:  There should be a DifferenceBuilder with a
826             ReflectionDifferenceBuilder implementation
827o LANG-944:  Add the Jaro-Winkler string distance algorithm to StringUtils.
828             Thanks to Rekha Joshi.
829o LANG-417:  New class ClassPathUtils with methods for turning FQN into
830             resource path
831o LANG-834:  Validate: add inclusiveBetween and exclusiveBetween overloads
832             for primitive types
833o LANG-900:  New RandomUtils class. Thanks to Duncan Jones.
834o LANG-966:  Add IBM OS/400 detection
835
836FIXED BUGS
837============
838
839o LANG-621:  ReflectionToStringBuilder.toString does not debug 3rd party object
840             fields within 3rd party object. Thanks to Philip Hodges,
841             Thomas Neidhart.
842o LANG-977:  NumericEntityEscaper incorrectly encodes supplementary characters.
843             Thanks to Chris Karcher.
844o LANG-973:  Make some private fields final
845o LANG-971:  NumberUtils#isNumber(String) fails to reject invalid Octal numbers
846o LANG-972:  NumberUtils#isNumber does not allow for hex 0XABCD
847o LANG-969:  StringUtils.toEncodedString(byte[], Charset) needlessly throws
848             UnsupportedEncodingException. Thanks to Matt Bishop.
849o LANG-946:  ConstantInitializerTest fails when building with IBM JDK 7
850o LANG-954:  uncaught PatternSyntaxException in FastDateFormat on Android.
851             Thanks to Michael Keppler.
852o LANG-936:  StringUtils.getLevenshteinDistance with too big of a threshold
853             returns wrong result. Thanks to Yaniv Kunda, Eli Lindsey.
854o LANG-943:  Test DurationFormatUtilsTest.testEdgeDuration fails in
855             JDK 1.6, 1.7 and 1.8, BRST time zone
856o LANG-613:  ConstructorUtils.getAccessibleConstructor() Does Not Check the
857             Accessibility of Enclosing Classes
858o LANG-951:  Fragments are wrong by 1 day when using fragment YEAR or MONTH.
859             Thanks to Sebastian G�tz.
860o LANG-950:  FastDateParser does not handle two digit year parsing like
861             SimpleDateFormat
862o LANG-949:  FastDateParserTest.testParses does not test FastDateParser
863o LANG-915:  Wrong locale handling in LocaleUtils.toLocale().
864             Thanks to Sergio Fern�ndez.
865
866CHANGES
867=========
868
869o LANG-961:  org.apache.commons.lang3.reflect.FieldUtils.removeFinalModifier(Field)
870             does not clean up after itself
871o LANG-958:  FastDateParser javadoc incorrectly states that SimpleDateFormat
872             is used internally
873o LANG-956:  Improve Javadoc of WordUtils.wrap methods
874o LANG-939:  Move Documentation from user guide to package-info files
875o LANG-953:  Convert package.html files to package-info.java files
876o LANG-940:  Fix deprecation warnings
877o LANG-819:  EnumUtils.generateBitVector needs a "? extends"
878
879=============================================================================
880
881                        Release Notes for version 3.2.1
882
883BUG FIXES
884===========
885
886o LANG-937:  Fix missing Hamcrest dependency in Ant Build
887o LANG-941:  Test failure in LocaleUtilsTest when building with JDK 8
888o LANG-942:  Test failure in FastDateParserTest and FastDateFormat_ParserTest
889             when building with JDK8. Thanks to Bruno P. Kinoshita,
890             Henri Yandell.
891o LANG-938:  Build fails with test failures when building with JDK 8
892
893=============================================================================
894
895                        Release Notes for version 3.2
896
897COMPATIBILITY WITH 3.1
898========================
899
900This release introduces backwards incompatible changes in
901org.apache.commons.lang3.time.FastDateFormat:
902o Method 'protected java.util.List parsePattern()' has been removed
903o Method 'protected java.lang.String parseToken(java.lang.String, int[])' has
904  been removed
905o Method 'protected org.apache.commons.lang3.time.FastDateFormat$NumberRule
906  selectNumberRule(int, int)' has been removed
907
908These changes were the result of [LANG-462]. It is assumed that this change
909will not break clients as Charles Honton pointed out on 25/Jan/12:
910"
911 1. Methods "FastDateFormat$NumberRule selectNumberRule(int, int)" and
912    "List<Rule> parsePattern()" couldn't have been overridden because
913    NumberRule and Rule were private to FastDateFormat.
914 2. Due to the factory pattern used, it's unlikely other two methods would have
915    been overridden.
916 3. The four methods are highly implementation specific. I consider it a
917    mistake that the methods were exposed.
918"
919For more information see https://issues.apache.org/jira/browse/LANG-462.
920
921NEW FEATURES
922==============
923
924o LANG-934:  Add removeFinalModifier to FieldUtils
925o LANG-863:  Method returns number of inheritance hops between parent and
926             subclass. Thanks to Daneel S. Yaitskov.
927o LANG-774:  Added isStarted, isSuspended and isStopped to StopWatch.
928             Thanks to Erhan Bagdemir.
929o LANG-848:  Added StringUtils.isBlank/isEmpty CharSequence... methods.
930             Thanks to Alexander Muthmann.
931o LANG-926:  Added ArrayUtils.reverse(array, from, to) methods.
932o LANG-795:  StringUtils.toString(byte[], String) deprecated in favour of a new
933             StringUtils.toString(byte[], CharSet). Thanks to Aaron Digulla.
934o LANG-893:  StrSubstitutor now supports default values for variables.
935             Thanks to Woonsan Ko.
936o LANG-913:  Adding .gitignore to commons-lang. Thanks to Allon Mureinik.
937o LANG-837:  Add ObjectUtils.toIdentityString methods that support
938             StringBuilder, StrBuilder, and Appendable.
939o LANG-886:  Added CharSetUtils.containsAny(String, String).
940o LANG-797:  Added escape/unescapeJson to StringEscapeUtils.
941o LANG-875:  Added appendIfMissing and prependIfMissing methods to StringUtils.
942o LANG-870:  Add StringUtils.LF and StringUtils.CR values.
943o LANG-873:  Add FieldUtils getAllFields() to return all the fields defined in
944             the given class and super classes.
945o LANG-835:  StrBuilder should support StringBuilder as an input parameter.
946o LANG-857:  StringIndexOutOfBoundsException in CharSequenceTranslator.
947o LANG-856:  Code refactoring in NumberUtils.
948o LANG-855:  NumberUtils#createBigInteger does not allow for hex and octal
949             numbers.
950o LANG-854:  NumberUtils#createNumber - does not allow for hex numbers to be
951             larger than Long.
952o LANG-853:  StringUtils join APIs for primitives.
953o LANG-841:  Add StringUtils API to call String.replaceAll in DOTALL a.k.a.
954             single-line mode.
955o LANG-825:  Create StrBuilder APIs similar to
956             String.format(String, Object...).
957o LANG-675:  Add Triple class (ternary version of Pair).
958o LANG-462:  FastDateFormat supports parse methods.
959
960BUG FIXES
961===========
962
963o LANG-932:  Spelling fixes. Thanks to Ville Skytt�.
964o LANG-929:  OctalUnescaper tried to parse all of \279.
965o LANG-928:  OctalUnescaper had bugs when parsing octals starting with a zero.
966o LANG-905:  EqualsBuilder returned true when comparing arrays, even when the
967             elements are different.
968o LANG-917:  Fixed exception when combining custom and choice format in
969             ExtendedMessageFormat. Thanks to Arne Burmeister.
970o LANG-902:  RandomStringUtils.random javadoc was incorrectly promising letters
971             and numbers would, as opposed to may, appear  Issue:. Thanks to
972             Andrzej Winnicki.
973o LANG-921:  BooleanUtils.xor(boolean...) produces wrong results.
974o LANG-896:  BooleanUtils.toBoolean(String str) javadoc is not updated. Thanks
975             to Mark Bryan Yu.
976o LANG-879:  LocaleUtils test fails with new Locale "ja_JP_JP_#u-ca-japanese"
977             of JDK7.
978o LANG-836:  StrSubstitutor does not support StringBuilder or CharSequence.
979             Thanks to Arnaud Brunet.
980o LANG-693:  Method createNumber from NumberUtils doesn't work for floating
981             point numbers other than Float  Issue: LANG-693. Thanks to
982             Calvin Echols.
983o LANG-887:  FastDateFormat does not use the locale specific cache correctly.
984o LANG-754:  ClassUtils.getShortName(String) will now only do a reverse lookup
985             for array types.
986o LANG-881:  NumberUtils.createNumber() Javadoc says it does not work for octal
987             numbers.
988o LANG-865:  LocaleUtils.toLocale does not parse strings starting with an
989             underscore.
990o LANG-858:  StringEscapeUtils.escapeJava() and escapeEcmaScript() do not
991             output the escaped surrogate pairs that are Java parsable.
992o LANG-849:  FastDateFormat and FastDatePrinter generates Date objects
993             wastefully.
994o LANG-845:  Spelling fixes.
995o LANG-844:  Fix examples contained in javadoc of StringUtils.center methods.
996o LANG-832:  FastDateParser does not handle unterminated quotes correctly.
997o LANG-831:  FastDateParser does not handle white-space properly.
998o LANG-830:  FastDateParser could use \Q \E to quote regexes.
999o LANG-828:  FastDateParser does not handle non-Gregorian calendars properly.
1000o LANG-826:  FastDateParser does not handle non-ASCII digits correctly.
1001o LANG-822:  NumberUtils#createNumber - bad behavior for leading "--".
1002o LANG-818:  FastDateFormat's "z" pattern does not respect timezone of Calendar
1003             instances passed to format().
1004o LANG-817:  Add org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS_8.
1005o LANG-813:  StringUtils.equalsIgnoreCase doesn't check string reference
1006             equality.
1007o LANG-810:  StringUtils.join() endIndex, bugged for loop.
1008o LANG-807:  RandomStringUtils throws confusing IAE when end <= start.
1009o LANG-805:  RandomStringUtils.random(count, 0, 0, false, false, universe,
1010             random) always throws java.lang.ArrayIndexOutOfBoundsException.
1011o LANG-802:  LocaleUtils - unnecessary recursive call in SyncAvoid class.
1012o LANG-800:  Javadoc bug in DateUtils#ceiling for Calendar and Object versions.
1013o LANG-788:  SerializationUtils throws ClassNotFoundException when cloning
1014             primitive classes.
1015o LANG-786:  StringUtils equals() relies on undefined behavior.
1016o LANG-783:  Documentation bug: StringUtils.split.
1017o LANG-777:  jar contains velocity template of release notes.
1018o LANG-776:  TypeUtilsTest contains incorrect type assignability assertion.
1019o LANG-775:  TypeUtils.getTypeArguments() misses type arguments for
1020             partially-assigned classes.
1021o LANG-773:  ImmutablePair doc contains nonsense text.
1022o LANG-772:  ClassUtils.PACKAGE_SEPARATOR Javadoc contains garbage text.
1023o LANG-765:  EventListenerSupport.ProxyInvocationHandler no longer defines
1024             serialVersionUID.
1025o LANG-764:  StrBuilder is now serializable.
1026o LANG-761:  Fix Javadoc Ant warnings.
1027o LANG-747:  NumberUtils does not handle Long Hex numbers.
1028o LANG-743:  Javadoc bug in static inner class DateIterator.
1029
1030CHANGES
1031=========
1032
1033o LANG-931:  Misleading Javadoc comment in StrBuilderReader class. Thanks
1034             to Christoph Schneegans.
1035o LANG-910:  StringUtils.normalizeSpace now handles non-breaking spaces
1036             (Unicode 00A0). Thanks to Timur Yarosh.
1037o LANG-804:  Redundant check for zero in HashCodeBuilder ctor. Thanks to
1038             Allon Mureinik.
1039o LANG-884:  Simplify FastDateFormat; eliminate boxing.
1040o LANG-882:  LookupTranslator now works with implementations of CharSequence
1041             other than String.
1042o LANG-846:  Provide CharSequenceUtils.regionMatches with a proper green
1043             implementation instead of inefficiently converting to Strings.
1044o LANG-839:  ArrayUtils removeElements methods use unnecessary HashSet.
1045o LANG-838:  ArrayUtils removeElements methods clone temporary index arrays
1046             unnecessarily.
1047o LANG-799:  DateUtils#parseDate uses default locale; add Locale support.
1048o LANG-798:  Use generics in SerializationUtils.
1049
1050CHANGES WITHOUT TICKET
1051========================
1052
1053o Fixed URLs in javadoc to point to new oracle.com pages
1054
1055=============================================================================
1056
1057                        Release Notes for version 3.1
1058
1059NEW FEATURES
1060==============
1061
1062o LANG-801:  Add Conversion utility to convert between data types on byte level
1063o LANG-760:  Add API StringUtils.toString(byte[] input, String charsetName)
1064o LANG-756:  Add APIs ClassUtils.isPrimitiveWrapper(Class<?>) and
1065             isPrimitiveOrWrapper(Class<?>)
1066o LANG-695:  SystemUtils.IS_OS_UNIX doesn't recognize FreeBSD as a Unix system
1067
1068BUG FIXES
1069===========
1070
1071o LANG-749:  Incorrect Bundle-SymbolicName in Manifest
1072o LANG-746:  NumberUtils does not handle upper-case hex: 0X and -0X
1073o LANG-744:  StringUtils throws java.security.AccessControlException on Google
1074             App Engine
1075o LANG-741:  Ant build has wrong component.name
1076o LANG-698:  Document that the Mutable numbers don't work as expected with
1077             String.format
1078
1079CHANGES
1080=========
1081
1082o LANG-758:  Add an example with whitespace in StringUtils.defaultIfEmpty
1083o LANG-752:  Fix createLong() so it behaves like createInteger()
1084o LANG-751:  Include the actual type in the Validate.isInstance and
1085             isAssignableFrom exception messages
1086o LANG-748:  Deprecating chomp(String, String)
1087o LANG-736:  CharUtils static final array CHAR_STRING is not needed to compute
1088             CHAR_STRING_ARRAY
1089
1090=============================================================================
1091
1092                        Release Notes for version 3.0
1093
1094ADDITIONS
1095===========
1096
1097o LANG-276:  MutableBigDecimal and MutableBigInteger.
1098o LANG-285:  Wish : method unaccent.
1099o LANG-358:  ObjectUtils.coalesce.
1100o LANG-386:  LeftOf/RightOfNumber in Range convenience methods necessary.
1101o LANG-435:  Add ClassUtils.isAssignable() variants with autoboxing.
1102o LANG-444:  StringUtils.emptyToNull.
1103o LANG-482:  Enhance StrSubstitutor to support nested ${var-${subvr}} expansion
1104o LANG-482:  StrSubstitutor now supports substitution in variable names.
1105o LANG-496:  A generic implementation of the Lazy initialization pattern.
1106o LANG-497:  Addition of ContextedException and ContextedRuntimeException.
1107o LANG-498:  Add StringEscapeUtils.escapeText() methods.
1108o LANG-499:  Add support for the handling of ExecutionExceptions.
1109o LANG-501:  Add support for background initialization.
1110o LANG-529:  Add a concurrent package.
1111o LANG-533:  Validate: support for validating blank strings.
1112o LANG-537:  Add ArrayUtils.toArray to create generic arrays.
1113o LANG-545:  Add ability to create a Future for a constant.
1114o LANG-546:  Add methods to Validate to check whether the index is valid for
1115             the array/list/string.
1116o LANG-553:  Add TypeUtils class to provide utility code for working with generic
1117             types.
1118o LANG-559:  Added isAssignableFrom and isInstanceOf validation methods.
1119o LANG-559:  Added validState validation method.
1120o LANG-560:  New TimedSemaphore class.
1121o LANG-582:  Provide an implementation of the ThreadFactory interface.
1122o LANG-588:  Create a basic Pair<L, R> class.
1123o LANG-594:  DateUtils equal & compare functions up to most significant field.
1124o LANG-601:  Add Builder Interface / Update Builders to Implement It.
1125o LANG-609:  Support lazy initialization using atomic variables
1126o LANG-610:  Extend exception handling in ConcurrentUtils to runtime exceptions.
1127o LANG-614:  StringUtils.endsWithAny method
1128o LANG-640:  Add normalizeSpace to StringUtils
1129o LANG-644:  Provide documentation about the new concurrent package
1130o LANG-649:  BooleanUtils.toBooleanObject to support single character input
1131o LANG-651:  Add AnnotationUtils
1132o LANG-653:  Provide a very basic ConcurrentInitializer implementation
1133o LANG-655:  Add StringUtils.defaultIfBlank()
1134o LANG-667:  Add a Null-safe compare() method to ObjectUtils
1135o LANG-676:  Documented potential NPE if auto-boxing occurs for some BooleanUtils
1136             methods
1137o LANG-678:  Add support for ConcurrentMap.putIfAbsent()
1138o LANG-692:  Add hashCodeMulti varargs method
1139o LANG-697:  Add FormattableUtils class
1140o LANG-684:  Levenshtein Distance Within a Given Threshold
1141
1142REMOVALS
1143==========
1144
1145o LANG-438:  Remove @deprecateds.
1146o LANG-492:  Remove code handled now by the JDK.
1147o LANG-493:  Remove code that does not hold enough value to remain.
1148o LANG-590:  Remove JDK 1.2/1.3 bug handling in
1149             StringUtils.indexOf(String, String, int).
1150o LANG-673:  WordUtils.abbreviate() removed
1151o LANG-691:  Removed DateUtils.UTC_TIME_ZONE
1152
1153IMPROVEMENTS
1154==============
1155
1156o LANG-290:  EnumUtils for JDK 5.0.
1157o LANG-336:  Finally start using generics.
1158o LANG-355:  StrBuilder should implement CharSequence and Appendable.
1159o LANG-396:  Investigate for vararg usages.
1160o LANG-424:  Improve Javadoc for StringUtils class.
1161o LANG-458:  Refactor Validate.java to eliminate code redundancy.
1162o LANG-479:  Document where in SVN trunk is.
1163o LANG-504:  bring ArrayUtils.isEmpty to the generics world.
1164o LANG-505:  Rewrite StringEscapeUtils.
1165o LANG-507:  StringEscapeUtils.unescapeJava should support \u+ notation.
1166o LANG-510:  Convert StringUtils API to take CharSequence.
1167o LANG-513:  Better EnumUtils.
1168o LANG-528:  Mutable classes should implement an appropriately typed Mutable
1169             interface.
1170o LANG-539:  Compile commons.lang for CDC 1.1/Foundation 1.1.
1171o LANG-540:  Make NumericEntityEscaper immutable.
1172o LANG-541:  Replace StringBuffer with StringBuilder.
1173o LANG-548:  Use Iterable on API instead of Collection.
1174o LANG-551:  Replace Range classes with generic version.
1175o LANG-562:  Change Maven groupId.
1176o LANG-563:  Change Java package name.
1177o LANG-570:  Do the test cases really still require main() and suite() methods?
1178o LANG-579:  Add new Validate methods.
1179o LANG-599:  ClassUtils.getClass(): Allow Dots as Inner Class Separators.
1180o LANG-605:  DefaultExceptionContext overwrites values in recursive situations.
1181o LANG-668:  Change ObjectUtils min() & max() functions to use varargs rather
1182             than just two parameters
1183o LANG-681:  Push down WordUtils to "text" sub-package.
1184o LANG-711:  Add includeantruntime=false to javac targets to quell warnings in
1185             ant 1.8.1 and better (and modest performance gain).
1186o LANG-713:  Increase test coverage of FieldUtils read methods and tweak
1187             javadoc.
1188o LANG-718:  build.xml Java 1.5+ updates.
1189
1190BUG FIXES
1191===========
1192
1193o LANG-11:   Depend on JDK 1.5+.
1194o LANG-302:  StrBuilder does not implement clone().
1195o LANG-339:  StringEscapeUtils.escapeHtml() escapes multibyte characters like
1196             Chinese, Japanese, etc.
1197o LANG-369:  ExceptionUtils not thread-safe.
1198o LANG-418:  Javadoc incorrect for StringUtils.endsWithIgnoreCase.
1199o LANG-428:  StringUtils.isAlpha, isAlphanumeric and isNumeric now return false
1200             for ""
1201o LANG-439:  StringEscapeUtils.escapeHTML() does not escape chars (0x00-0x20).
1202o LANG-448:  Lower Ascii Characters don't get encoded by Entities.java.
1203o LANG-468:  JDK 1.5 build/runtime failure on LANG-393 (EqualsBuilder).
1204o LANG-474:  Fixes for thread safety.
1205o LANG-478:  StopWatch does not resist to system time changes.
1206o LANG-480:  StringEscapeUtils.escapeHtml incorrectly converts unicode
1207             characters above U+00FFFF into 2 characters.
1208o LANG-481:  Possible race-conditions in hashCode of the range classes.
1209o LANG-564:  Improve StrLookup API documentation.
1210o LANG-568:  @SuppressWarnings("unchecked") is used too generally.
1211o LANG-571:  ArrayUtils.add(T[:  array, T element) can create unexpected
1212             ClassCastException.
1213o LANG-585:  exception.DefaultExceptionContext.getFormattedExceptionMessage
1214             catches Throwable.
1215o LANG-596:  StrSubstitutor should also handle the default properties of a
1216             java.util.Properties class
1217o LANG-600:  Javadoc is incorrect for public static int
1218             lastIndexOf(String str, String searchStr).
1219o LANG-602:  ContextedRuntimeException no longer an 'unchecked' exception.
1220o LANG-606:  EqualsBuilder causes StackOverflowException.
1221o LANG-608:  Some StringUtils methods should take an int character instead of
1222             char to use String API features.
1223o LANG-617:  StringEscapeUtils.escapeXML() can't process UTF-16 supplementary
1224             characters
1225o LANG-624:  SystemUtils.getJavaVersionAsFloat throws
1226             StringIndexOutOfBoundsException on Android runtime/Dalvik VM
1227o LANG-629:  Charset may not be threadsafe, because the HashSet is not synch.
1228o LANG-638:  NumberUtils createNumber throws a StringIndexOutOfBoundsException
1229             when argument containing "e" and "E" is passed in
1230o LANG-643:  Javadoc StringUtils.left() claims to throw on negative len, but
1231             doesn't
1232o LANG-645:  FastDateFormat.format() outputs incorrect week of year because
1233             locale isn't respected
1234o LANG-646:  StringEscapeUtils.unescapeJava doesn't handle octal escapes and
1235             Unicode with extra u
1236o LANG-656:  Example StringUtils.indexOfAnyBut("zzabyycdxx", '') = 0 incorrect
1237o LANG-658:  Some entities like &Ouml; are not matched properly against its
1238             ISO8859-1 representation
1239o LANG-659:  EntityArrays typo: {"\u2122", "&minus;"}, // minus sign, U+2212
1240             ISOtech
1241o LANG-66:   StringEscaper.escapeXml() escapes characters > 0x7f.
1242o LANG-662:  org.apache.commons.lang3.math.Fraction does not reduce
1243             (Integer.MIN_VALUE, 2^k)
1244o LANG-663:  org.apache.commons.lang3.math.Fraction does not always succeed in
1245             multiplyBy and divideBy
1246o LANG-664:  NumberUtils.isNumber(String) is not right when the String is
1247             "1.1L"
1248o LANG-672:  Doc bug in DateUtils#ceiling
1249o LANG-677:  DateUtils.isSameLocalTime compares using 12 hour clock and not
1250             24 hour
1251o LANG-685:  EqualsBuilder synchronizes on HashCodeBuilder.
1252o LANG-703:  StringUtils.join throws NPE when toString returns null for one of
1253             objects in collection
1254o LANG-710:  StringIndexOutOfBoundsException when calling unescapeHtml4("&#03")
1255o LANG-714:  StringUtils doc/comment spelling fixes.
1256o LANG-715:  CharSetUtils.squeeze() speedup.
1257o LANG-716:  swapCase and *capitalize speedups.
1258
1259
1260Historical list of changes: https://commons.apache.org/lang/changes-report.html
1261
1262For complete information on Commons Lang, including instructions on how to
1263submit bug reports, patches, or suggestions for improvement, see the
1264Apache Commons Lang website:
1265
1266https://commons.apache.org/lang/
1267
1268Have fun!
1269-Apache Commons Lang team
1270
1271