xref: /aosp_15_r20/external/apache-commons-lang/src/site/resources/release-notes/RELEASE-NOTES-3.3.1.txt (revision 455610af95f3bf5f4bc8a9eda520f57e389a4c42)
1Licensed to the Apache Software Foundation (ASF) under one or more
2contributor license agreements.  See the NOTICE file distributed with
3this work for additional information regarding copyright ownership.
4The ASF licenses this file to You under the Apache License, Version 2.0
5(the "License"); you may not use this file except in compliance with
6the License.  You may obtain a copy of the License at
7
8http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15
16=============================================================================
17
18                           Apache Commons Lang
19                               Version 3.3.1
20                              Release Notes
21
22
23INTRODUCTION:
24
25This document contains the release notes for the 3.3.1 version of
26Apache Commons Lang. Commons Lang is a set of utility functions and reusable
27components that should be of use in any Java environment. Commons Lang 3.3.1
28at least requires Java 6.0.
29
30For the advice on upgrading from 2.x to 3.x, see the following page:
31
32    https://commons.apache.org/lang/article3_0.html
33
34FIXED BUGS
35============
36
37o LANG-987:  DateUtils.getFragmentInDays(Date, Calendar.MONTH) returns wrong
38             days
39o LANG-983:  DurationFormatUtils does not describe format string fully
40o LANG-981:  DurationFormatUtils#lexx does not detect unmatched quote char
41o LANG-984:  DurationFormatUtils does not handle large durations correctly
42o LANG-982:  DurationFormatUtils.formatDuration(61999, "s.SSSS") - ms field
43             size should be 4 digits
44o LANG-978:  Failing tests with Java 8 b128
45
46                        Release Notes for version 3.3
47
48NEW FEATURES
49==============
50
51o LANG-955:  Add methods for removing all invalid characters according to
52             XML 1.0 and XML 1.1 in an input string to StringEscapeUtils.
53             Thanks to Adam Hooper.
54o LANG-970:  Add APIs MutableBoolean setTrue() and setFalse()
55o LANG-962:  Add SerializationUtils.roundtrip(T extends Serializable) to
56             serialize then deserialize
57o LANG-637:  There should be a DifferenceBuilder with a
58             ReflectionDifferenceBuilder implementation
59o LANG-944:  Add the Jaro-Winkler string distance algorithm to StringUtils.
60             Thanks to Rekha Joshi.
61o LANG-417:  New class ClassPathUtils with methods for turning FQN into
62             resource path
63o LANG-834:  Validate: add inclusiveBetween and exclusiveBetween overloads
64             for primitive types
65o LANG-900:  New RandomUtils class. Thanks to Duncan Jones.
66o LANG-966:  Add IBM OS/400 detection
67
68FIXED BUGS
69============
70
71o LANG-621:  ReflectionToStringBuilder.toString does not debug 3rd party object
72             fields within 3rd party object. Thanks to Philip Hodges,
73             Thomas Neidhart.
74o LANG-977:  NumericEntityEscaper incorrectly encodes supplementary characters.
75             Thanks to Chris Karcher.
76o LANG-973:  Make some private fields final
77o LANG-971:  NumberUtils#isNumber(String) fails to reject invalid Octal numbers
78o LANG-972:  NumberUtils#isNumber does not allow for hex 0XABCD
79o LANG-969:  StringUtils.toEncodedString(byte[], Charset) needlessly throws
80             UnsupportedEncodingException. Thanks to Matt Bishop.
81o LANG-946:  ConstantInitializerTest fails when building with IBM JDK 7
82o LANG-954:  uncaught PatternSyntaxException in FastDateFormat on Android.
83             Thanks to Michael Keppler.
84o LANG-936:  StringUtils.getLevenshteinDistance with too big of a threshold
85             returns wrong result. Thanks to Yaniv Kunda, Eli Lindsey.
86o LANG-943:  Test DurationFormatUtilsTest.testEdgeDuration fails in
87             JDK 1.6, 1.7 and 1.8, BRST time zone
88o LANG-613:  ConstructorUtils.getAccessibleConstructor() Does Not Check the
89             Accessibility of Enclosing Classes
90o LANG-951:  Fragments are wrong by 1 day when using fragment YEAR or MONTH.
91             Thanks to Sebastian Götz.
92o LANG-950:  FastDateParser does not handle two digit year parsing like
93             SimpleDateFormat
94o LANG-949:  FastDateParserTest.testParses does not test FastDateParser
95o LANG-915:  Wrong locale handling in LocaleUtils.toLocale().
96             Thanks to Sergio Fernández.
97
98CHANGES
99=========
100
101o LANG-961:  org.apache.commons.lang3.reflect.FieldUtils.removeFinalModifier(Field)
102             does not clean up after itself
103o LANG-958:  FastDateParser javadoc incorrectly states that SimpleDateFormat
104             is used internally
105o LANG-956:  Improve Javadoc of WordUtils.wrap methods
106o LANG-939:  Move Documentation from user guide to package-info files
107o LANG-953:  Convert package.html files to package-info.java files
108o LANG-940:  Fix deprecation warnings
109o LANG-819:  EnumUtils.generateBitVector needs a "? extends"
110
111                        Release Notes for version 3.2.1
112
113BUG FIXES
114===========
115
116o LANG-937:  Fix missing Hamcrest dependency in Ant Build
117o LANG-941:  Test failure in LocaleUtilsTest when building with JDK 8
118o LANG-942:  Test failure in FastDateParserTest and FastDateFormat_ParserTest
119             when building with JDK8. Thanks to Bruno P. Kinoshita,
120             Henri Yandell.
121o LANG-938:  Build fails with test failures when building with JDK 8
122
123                        Release Notes for version 3.2
124
125COMPATIBILITY WITH 3.1
126========================
127
128This release introduces backwards incompatible changes in
129org.apache.commons.lang3.time.FastDateFormat:
130o Method 'protected java.util.List parsePattern()' has been removed
131o Method 'protected java.lang.String parseToken(java.lang.String, int[])' has
132  been removed
133o Method 'protected org.apache.commons.lang3.time.FastDateFormat$NumberRule
134  selectNumberRule(int, int)' has been removed
135
136These changes were the result of [LANG-462]. It is assumed that this change
137will not break clients as Charles Honton pointed out on 25/Jan/12:
138"
139 1. Methods "FastDateFormat$NumberRule selectNumberRule(int, int)" and
140    "List<Rule> parsePattern()" couldn't have been overridden because
141    NumberRule and Rule were private to FastDateFormat.
142 2. Due to the factory pattern used, it's unlikely other two methods would have
143    been overridden.
144 3. The four methods are highly implementation specific. I consider it a
145    mistake that the methods were exposed.
146"
147For more information see https://issues.apache.org/jira/browse/LANG-462.
148
149NEW FEATURES
150==============
151
152o LANG-934:  Add removeFinalModifier to FieldUtils
153o LANG-863:  Method returns number of inheritance hops between parent and
154             subclass. Thanks to Daneel S. Yaitskov.
155o LANG-774:  Added isStarted, isSuspended and isStopped to StopWatch.
156             Thanks to Erhan Bagdemir.
157o LANG-848:  Added StringUtils.isBlank/isEmpty CharSequence... methods.
158             Thanks to Alexander Muthmann.
159o LANG-926:  Added ArrayUtils.reverse(array, from, to) methods.
160o LANG-795:  StringUtils.toString(byte[], String) deprecated in favour of a new
161             StringUtils.toString(byte[], CharSet). Thanks to Aaron Digulla.
162o LANG-893:  StrSubstitutor now supports default values for variables.
163             Thanks to Woonsan Ko.
164o LANG-913:  Adding .gitignore to commons-lang. Thanks to Allon Mureinik.
165o LANG-837:  Add ObjectUtils.toIdentityString methods that support
166             StringBuilder, StrBuilder, and Appendable.
167o LANG-886:  Added CharSetUtils.containsAny(String, String).
168o LANG-797:  Added escape/unescapeJson to StringEscapeUtils.
169o LANG-875:  Added appendIfMissing and prependIfMissing methods to StringUtils.
170o LANG-870:  Add StringUtils.LF and StringUtils.CR values.
171o LANG-873:  Add FieldUtils getAllFields() to return all the fields defined in
172             the given class and super classes.
173o LANG-835:  StrBuilder should support StringBuilder as an input parameter.
174o LANG-857:  StringIndexOutOfBoundsException in CharSequenceTranslator.
175o LANG-856:  Code refactoring in NumberUtils.
176o LANG-855:  NumberUtils#createBigInteger does not allow for hex and octal
177             numbers.
178o LANG-854:  NumberUtils#createNumber - does not allow for hex numbers to be
179             larger than Long.
180o LANG-853:  StringUtils join APIs for primitives.
181o LANG-841:  Add StringUtils API to call String.replaceAll in DOTALL a.k.a.
182             single-line mode.
183o LANG-825:  Create StrBuilder APIs similar to
184             String.format(String, Object...).
185o LANG-675:  Add Triple class (ternary version of Pair).
186o LANG-462:  FastDateFormat supports parse methods.
187
188BUG FIXES
189===========
190
191o LANG-932:  Spelling fixes. Thanks to Ville Skyttä.
192o LANG-929:  OctalUnescaper tried to parse all of \279.
193o LANG-928:  OctalUnescaper had bugs when parsing octals starting with a zero.
194o LANG-905:  EqualsBuilder returned true when comparing arrays, even when the
195             elements are different.
196o LANG-917:  Fixed exception when combining custom and choice format in
197             ExtendedMessageFormat. Thanks to Arne Burmeister.
198o LANG-902:  RandomStringUtils.random javadoc was incorrectly promising letters
199             and numbers would, as opposed to may, appear  Issue:. Thanks to
200             Andrzej Winnicki.
201o LANG-921:  BooleanUtils.xor(boolean...) produces wrong results.
202o LANG-896:  BooleanUtils.toBoolean(String str) javadoc is not updated. Thanks
203             to Mark Bryan Yu.
204o LANG-879:  LocaleUtils test fails with new Locale "ja_JP_JP_#u-ca-japanese"
205             of JDK7.
206o LANG-836:  StrSubstitutor does not support StringBuilder or CharSequence.
207             Thanks to Arnaud Brunet.
208o LANG-693:  Method createNumber from NumberUtils doesn't work for floating
209             point numbers other than Float  Issue: LANG-693. Thanks to
210             Calvin Echols.
211o LANG-887:  FastDateFormat does not use the locale specific cache correctly.
212o LANG-754:  ClassUtils.getShortName(String) will now only do a reverse lookup
213             for array types.
214o LANG-881:  NumberUtils.createNumber() Javadoc says it does not work for octal
215             numbers.
216o LANG-865:  LocaleUtils.toLocale does not parse strings starting with an
217             underscore.
218o LANG-858:  StringEscapeUtils.escapeJava() and escapeEcmaScript() do not
219             output the escaped surrogate pairs that are Java parsable.
220o LANG-849:  FastDateFormat and FastDatePrinter generates Date objects
221             wastefully.
222o LANG-845:  Spelling fixes.
223o LANG-844:  Fix examples contained in javadoc of StringUtils.center methods.
224o LANG-832:  FastDateParser does not handle unterminated quotes correctly.
225o LANG-831:  FastDateParser does not handle white-space properly.
226o LANG-830:  FastDateParser could use \Q \E to quote regexes.
227o LANG-828:  FastDateParser does not handle non-Gregorian calendars properly.
228o LANG-826:  FastDateParser does not handle non-ASCII digits correctly.
229o LANG-822:  NumberUtils#createNumber - bad behavior for leading "--".
230o LANG-818:  FastDateFormat's "z" pattern does not respect timezone of Calendar
231             instances passed to format().
232o LANG-817:  Add org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS_8.
233o LANG-813:  StringUtils.equalsIgnoreCase doesn't check string reference
234             equality.
235o LANG-810:  StringUtils.join() endIndex, bugged for loop.
236o LANG-807:  RandomStringUtils throws confusing IAE when end <= start.
237o LANG-805:  RandomStringUtils.random(count, 0, 0, false, false, universe,
238             random) always throws java.lang.ArrayIndexOutOfBoundsException.
239o LANG-802:  LocaleUtils - unnecessary recursive call in SyncAvoid class.
240o LANG-800:  Javadoc bug in DateUtils#ceiling for Calendar and Object versions.
241o LANG-788:  SerializationUtils throws ClassNotFoundException when cloning
242             primitive classes.
243o LANG-786:  StringUtils equals() relies on undefined behavior.
244o LANG-783:  Documentation bug: StringUtils.split.
245o LANG-777:  jar contains velocity template of release notes.
246o LANG-776:  TypeUtilsTest contains incorrect type assignability assertion.
247o LANG-775:  TypeUtils.getTypeArguments() misses type arguments for
248             partially-assigned classes.
249o LANG-773:  ImmutablePair doc contains nonsense text.
250o LANG-772:  ClassUtils.PACKAGE_SEPARATOR Javadoc contains garbage text.
251o LANG-765:  EventListenerSupport.ProxyInvocationHandler no longer defines
252             serialVersionUID.
253o LANG-764:  StrBuilder is now serializable.
254o LANG-761:  Fix Javadoc Ant warnings.
255o LANG-747:  NumberUtils does not handle Long Hex numbers.
256o LANG-743:  Javadoc bug in static inner class DateIterator.
257
258CHANGES
259=========
260
261o LANG-931:  Misleading Javadoc comment in StrBuilderReader class. Thanks
262             to Christoph Schneegans.
263o LANG-910:  StringUtils.normalizeSpace now handles non-breaking spaces
264             (Unicode 00A0). Thanks to Timur Yarosh.
265o LANG-804:  Redundant check for zero in HashCodeBuilder ctor. Thanks to
266             Allon Mureinik.
267o LANG-884:  Simplify FastDateFormat; eliminate boxing.
268o LANG-882:  LookupTranslator now works with implementations of CharSequence
269             other than String.
270o LANG-846:  Provide CharSequenceUtils.regionMatches with a proper green
271             implementation instead of inefficiently converting to Strings.
272o LANG-839:  ArrayUtils removeElements methods use unnecessary HashSet.
273o LANG-838:  ArrayUtils removeElements methods clone temporary index arrays
274             unnecessarily.
275o LANG-799:  DateUtils#parseDate uses default locale; add Locale support.
276o LANG-798:  Use generics in SerializationUtils.
277
278CHANGES WITHOUT TICKET
279========================
280
281o Fixed URLs in javadoc to point to new oracle.com pages
282
283
284                        Release Notes for version 3.1
285
286NEW FEATURES
287==============
288
289o LANG-801:  Add Conversion utility to convert between data types on byte level
290o LANG-760:  Add API StringUtils.toString(byte[] input, String charsetName)
291o LANG-756:  Add APIs ClassUtils.isPrimitiveWrapper(Class<?>) and
292             isPrimitiveOrWrapper(Class<?>)
293o LANG-695:  SystemUtils.IS_OS_UNIX doesn't recognize FreeBSD as a Unix system
294
295BUG FIXES
296===========
297
298o LANG-749:  Incorrect Bundle-SymbolicName in Manifest
299o LANG-746:  NumberUtils does not handle upper-case hex: 0X and -0X
300o LANG-744:  StringUtils throws java.security.AccessControlException on Google
301             App Engine
302o LANG-741:  Ant build has wrong component.name
303o LANG-698:  Document that the Mutable numbers don't work as expected with
304             String.format
305
306CHANGES
307=========
308
309o LANG-758:  Add an example with whitespace in StringUtils.defaultIfEmpty
310o LANG-752:  Fix createLong() so it behaves like createInteger()
311o LANG-751:  Include the actual type in the Validate.isInstance and
312             isAssignableFrom exception messages
313o LANG-748:  Deprecating chomp(String, String)
314o LANG-736:  CharUtils static final array CHAR_STRING is not needed to compute
315             CHAR_STRING_ARRAY
316
317
318                        Release Notes for version 3.0
319
320ADDITIONS
321===========
322
323o LANG-276:  MutableBigDecimal and MutableBigInteger.
324o LANG-285:  Wish : method unaccent.
325o LANG-358:  ObjectUtils.coalesce.
326o LANG-386:  LeftOf/RightOfNumber in Range convenience methods necessary.
327o LANG-435:  Add ClassUtils.isAssignable() variants with autoboxing.
328o LANG-444:  StringUtils.emptyToNull.
329o LANG-482:  Enhance StrSubstitutor to support nested ${var-${subvr}} expansion
330o LANG-482:  StrSubstitutor now supports substitution in variable names.
331o LANG-496:  A generic implementation of the Lazy initialization pattern.
332o LANG-497:  Addition of ContextedException and ContextedRuntimeException.
333o LANG-498:  Add StringEscapeUtils.escapeText() methods.
334o LANG-499:  Add support for the handling of ExecutionExceptions.
335o LANG-501:  Add support for background initialization.
336o LANG-529:  Add a concurrent package.
337o LANG-533:  Validate: support for validating blank strings.
338o LANG-537:  Add ArrayUtils.toArray to create generic arrays.
339o LANG-545:  Add ability to create a Future for a constant.
340o LANG-546:  Add methods to Validate to check whether the index is valid for
341             the array/list/string.
342o LANG-553:  Add TypeUtils class to provide utility code for working with generic
343             types.
344o LANG-559:  Added isAssignableFrom and isInstanceOf validation methods.
345o LANG-559:  Added validState validation method.
346o LANG-560:  New TimedSemaphore class.
347o LANG-582:  Provide an implementation of the ThreadFactory interface.
348o LANG-588:  Create a basic Pair<L, R> class.
349o LANG-594:  DateUtils equal & compare functions up to most significant field.
350o LANG-601:  Add Builder Interface / Update Builders to Implement It.
351o LANG-609:  Support lazy initialization using atomic variables
352o LANG-610:  Extend exception handling in ConcurrentUtils to runtime exceptions.
353o LANG-614:  StringUtils.endsWithAny method
354o LANG-640:  Add normalizeSpace to StringUtils
355o LANG-644:  Provide documentation about the new concurrent package
356o LANG-649:  BooleanUtils.toBooleanObject to support single character input
357o LANG-651:  Add AnnotationUtils
358o LANG-653:  Provide a very basic ConcurrentInitializer implementation
359o LANG-655:  Add StringUtils.defaultIfBlank()
360o LANG-667:  Add a Null-safe compare() method to ObjectUtils
361o LANG-676:  Documented potential NPE if auto-boxing occurs for some BooleanUtils
362             methods
363o LANG-678:  Add support for ConcurrentMap.putIfAbsent()
364o LANG-692:  Add hashCodeMulti varargs method
365o LANG-697:  Add FormattableUtils class
366o LANG-684:  Levenshtein Distance Within a Given Threshold
367
368REMOVALS
369==========
370
371o LANG-438:  Remove @deprecateds.
372o LANG-492:  Remove code handled now by the JDK.
373o LANG-493:  Remove code that does not hold enough value to remain.
374o LANG-590:  Remove JDK 1.2/1.3 bug handling in
375             StringUtils.indexOf(String, String, int).
376o LANG-673:  WordUtils.abbreviate() removed
377o LANG-691:  Removed DateUtils.UTC_TIME_ZONE
378
379IMPROVEMENTS
380==============
381
382o LANG-290:  EnumUtils for JDK 5.0.
383o LANG-336:  Finally start using generics.
384o LANG-355:  StrBuilder should implement CharSequence and Appendable.
385o LANG-396:  Investigate for vararg usages.
386o LANG-424:  Improve Javadoc for StringUtils class.
387o LANG-458:  Refactor Validate.java to eliminate code redundancy.
388o LANG-479:  Document where in SVN trunk is.
389o LANG-504:  bring ArrayUtils.isEmpty to the generics world.
390o LANG-505:  Rewrite StringEscapeUtils.
391o LANG-507:  StringEscapeUtils.unescapeJava should support \u+ notation.
392o LANG-510:  Convert StringUtils API to take CharSequence.
393o LANG-513:  Better EnumUtils.
394o LANG-528:  Mutable classes should implement an appropriately typed Mutable
395             interface.
396o LANG-539:  Compile commons.lang for CDC 1.1/Foundation 1.1.
397o LANG-540:  Make NumericEntityEscaper immutable.
398o LANG-541:  Replace StringBuffer with StringBuilder.
399o LANG-548:  Use Iterable on API instead of Collection.
400o LANG-551:  Replace Range classes with generic version.
401o LANG-562:  Change Maven groupId.
402o LANG-563:  Change Java package name.
403o LANG-570:  Do the test cases really still require main() and suite() methods?
404o LANG-579:  Add new Validate methods.
405o LANG-599:  ClassUtils.getClass(): Allow Dots as Inner Class Separators.
406o LANG-605:  DefaultExceptionContext overwrites values in recursive situations.
407o LANG-668:  Change ObjectUtils min() & max() functions to use varargs rather
408             than just two parameters
409o LANG-681:  Push down WordUtils to "text" sub-package.
410o LANG-711:  Add includeantruntime=false to javac targets to quell warnings in
411             ant 1.8.1 and better (and modest performance gain).
412o LANG-713:  Increase test coverage of FieldUtils read methods and tweak
413             javadoc.
414o LANG-718:  build.xml Java 1.5+ updates.
415
416BUG FIXES
417===========
418
419o LANG-11:   Depend on JDK 1.5+.
420o LANG-302:  StrBuilder does not implement clone().
421o LANG-339:  StringEscapeUtils.escapeHtml() escapes multibyte characters like
422             Chinese, Japanese, etc.
423o LANG-369:  ExceptionUtils not thread-safe.
424o LANG-418:  Javadoc incorrect for StringUtils.endsWithIgnoreCase.
425o LANG-428:  StringUtils.isAlpha, isAlphanumeric and isNumeric now return false
426             for ""
427o LANG-439:  StringEscapeUtils.escapeHTML() does not escape chars (0x00-0x20).
428o LANG-448:  Lower Ascii Characters don't get encoded by Entities.java.
429o LANG-468:  JDK 1.5 build/runtime failure on LANG-393 (EqualsBuilder).
430o LANG-474:  Fixes for thread safety.
431o LANG-478:  StopWatch does not resist to system time changes.
432o LANG-480:  StringEscapeUtils.escapeHtml incorrectly converts unicode
433             characters above U+00FFFF into 2 characters.
434o LANG-481:  Possible race-conditions in hashCode of the range classes.
435o LANG-564:  Improve StrLookup API documentation.
436o LANG-568:  @SuppressWarnings("unchecked") is used too generally.
437o LANG-571:  ArrayUtils.add(T[:  array, T element) can create unexpected
438             ClassCastException.
439o LANG-585:  exception.DefaultExceptionContext.getFormattedExceptionMessage
440             catches Throwable.
441o LANG-596:  StrSubstitutor should also handle the default properties of a
442             java.util.Properties class
443o LANG-600:  Javadoc is incorrect for public static int
444             lastIndexOf(String str, String searchStr).
445o LANG-602:  ContextedRuntimeException no longer an 'unchecked' exception.
446o LANG-606:  EqualsBuilder causes StackOverflowException.
447o LANG-608:  Some StringUtils methods should take an int character instead of
448             char to use String API features.
449o LANG-617:  StringEscapeUtils.escapeXML() can't process UTF-16 supplementary
450             characters
451o LANG-624:  SystemUtils.getJavaVersionAsFloat throws
452             StringIndexOutOfBoundsException on Android runtime/Dalvik VM
453o LANG-629:  Charset may not be threadsafe, because the HashSet is not synch.
454o LANG-638:  NumberUtils createNumber throws a StringIndexOutOfBoundsException
455             when argument containing "e" and "E" is passed in
456o LANG-643:  Javadoc StringUtils.left() claims to throw on negative len, but
457             doesn't
458o LANG-645:  FastDateFormat.format() outputs incorrect week of year because
459             locale isn't respected
460o LANG-646:  StringEscapeUtils.unescapeJava doesn't handle octal escapes and
461             Unicode with extra u
462o LANG-656:  Example StringUtils.indexOfAnyBut("zzabyycdxx", '') = 0 incorrect
463o LANG-658:  Some entities like &Ouml; are not matched properly against its
464             ISO8859-1 representation
465o LANG-659:  EntityArrays typo: {"\u2122", "&minus;"}, // minus sign, U+2212
466             ISOtech
467o LANG-66:   StringEscaper.escapeXml() escapes characters > 0x7f.
468o LANG-662:  org.apache.commons.lang3.math.Fraction does not reduce
469             (Integer.MIN_VALUE, 2^k)
470o LANG-663:  org.apache.commons.lang3.math.Fraction does not always succeed in
471             multiplyBy and divideBy
472o LANG-664:  NumberUtils.isNumber(String) is not right when the String is
473             "1.1L"
474o LANG-672:  Doc bug in DateUtils#ceiling
475o LANG-677:  DateUtils.isSameLocalTime compares using 12-hour clock and not
476             24-hour
477o LANG-685:  EqualsBuilder synchronizes on HashCodeBuilder.
478o LANG-703:  StringUtils.join throws NPE when toString returns null for one of
479             objects in collection
480o LANG-710:  StringIndexOutOfBoundsException when calling unescapeHtml4("&#03")
481o LANG-714:  StringUtils doc/comment spelling fixes.
482o LANG-715:  CharSetUtils.squeeze() speedup.
483o LANG-716:  swapCase and *capitalize speedups.
484
485
486Historical list of changes: https://commons.apache.org/lang/changes-report.html
487
488For complete information on Commons Lang, including instructions on how to
489submit bug reports, patches, or suggestions for improvement, see the
490Apache Commons Lang website:
491
492https://commons.apache.org/lang/
493
494Have fun!
495-Apache Commons Lang team
496
497