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