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