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