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