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