Apache Commons Lang Release Notes NumberUtils.createNumber() to recognize hex integers prefixed with +. NumberUtils.createNumber() to return requested floating point type for zero. DMI: Random object created and used only once (DMI_RANDOM_USED_ONLY_ONCE); Better multi-threaded behavior. Redundant Collection operation. Use Collections.emptyIterator() #738. Make Streams.stream(Collection) null-safe. Allow tests to access java.util classes such as ArrayList in Java 16 #788. OpenJDK 16 Day Period Parsing #791. Update documentation to list correct exception for null array parameters #785. Fixing reversed Javadoc descriptions in StopWatch #781. Fix typos in JavaDoc #795. Simplify assertions with equivalent but more simple. #792. Avoid multiple equivalent occurrences of the same expression. #797. Remove redundant initializers #800. Fix ObjectUtils Javadocs #755. Add test idea for RangeTest from PR #815 by Rushi98, but with a new comment. Make Range constructors more generic #810. Use final and Remove redundant String. #813, #816. Use Set instead of List for checking the contains() method #734. Javadoc for StringUtils.substringBefore(String str, int separator) doesn't mention that the separator is an int. Fix NullPointerException in ThreadUtils.getSystemThreadGroup() when the current thread is stopped. ArrayUtils.toPrimitive(Boolean...) null array elements map to false, like Boolean.parseBoolean(null) and its callers return false. StrBuilder.StrBuilderReader.skip(long): Throw an exception when an implicit narrowing conversion in a compound assignment would result in information loss or a numeric error such as an overflows. Deprecate Validate#notNull(Object) in favor of using Objects#requireNonNull(Object, String). Use TimeZone from calendar in DateFormatUtils. Updating javadoc for NullPointerException when Validate.notNull() is called #870. Fixing and adding DateUtils exception Javadocs #871. Improve performance of StringUtils.unwrap(String, String) #844. Improve performance of StringUtils.join for primitives #812. Fixed NPE getting Stack Trace if Throwable is null #733. Make Validate.isAssignableFrom() check null inputs. Fix Javadoc for Validate.isAssignableFrom(). Make final mappingFunction variable #876. Remove unnecessary variable creations #882. Minor changes #769. FastDateFormat does not support the 'L'-Pattern from SimpleDateFormat. Increase test coverage of ComparableUtils from 71% to 100% #898. Increase method test coverage of MultilineRecursiveToStringStyle #899. Fix unstable coverage of CharSequenceUtils tests noticed during merge of PRs 898 and 899 #901. Rewrite Conversion.binaryBeMsb0ToHexDigit to invert logic of binaryToHexDigit. Allow extension of previously final classes ImmutablePair and ImmutableTriple. Update ClassUtils Javadoc with some missing throws NPE #912. Javadoc: StringUtils.repeat("", "x", 3) = "xx"; #918. Fix typos #920, #923. Simplify condition #925. StringUtils.join(Iterable, String) should only return null when the Iterable is null. StringUtils.join(Iterator, String) should only return null when the Iterator is null. Add tests to increase coverage #904. Extends Object clauses are redundant #937. Simplify conditional expression. #941. Fix some Javadoc comments #938. Deprecate getNanosOfMiili() method with typo and create proper getNanosOfMilli() #940. Deprecate ThreadUtils code that defines custom function interfaces in favor of stock java.util.function.Predicate usage. Fix links in Javadoc and documentation #926. Deprecate RandomUtils in favor of Apache Commons RNG UniformRandomProvider #942. Added docs regarding week year support #924. ClassUtils.getShortCanonicalName doesn't use the canonicalName #949. Validate: Get error messages without using String.format when varargs is empty. Simplify expression (length is never < 0) #962. Fix simple broken javadoc. #981. Fix typo #1001. Use Objects.requireNonNull() directly #1022. Add GitHub coverage.yml. Add EnumUtils.getEnumSystemProperty(...). Add TriConsumer. Add and use EnumUtils.getFirstEnumIgnoreCase(Class, String, Function, E). Add and use Suppliers. Add and use ArrayUtils.getComponentType(T[]). Add and use ClassUtils.getComponentType(Class>T[]>). Add and use ObjectUtils.getClass(T). Add and use ArrayUtils.newInstance(Class>T>, int). Add and use null-safe Streams.of(T...). Add ClassUtils.comparator(). Add and use ThreadUtils.sleepQuietly(Duration). Add and use ArrayUtils.setAll(T[], IntFunction). Add and use ArrayUtils.setAll(T[], Supplier). Add BooleanConsumer. Add IntToCharFunction. Add IntStreams. Add UncheckedFuture. Add UncheckedException. Add UncheckedExecutionException. Add UncheckedTimeoutException. Add UncheckedInterruptedException. Add TimeZones.GMT. Add ObjectUtils.identityHashCodeHex(Object). Add ObjectUtils.hashCodeHex(Object). Add StringUtils.removeStart(String, char). Add null-safe ObjectUtils.isArray() #754. Add ComparableUtils.max(A, A) and ComparableUtils.min(A, A). Add UncheckedReflectiveOperationException. Add and use ClassUtils.isPublic(Class). Add UncheckedIllegalAccessException. Add MethodInvokers. Add Streams.nullSafeStream(Collection). Add Streams.toStream(Collection). Add Streams.failableStream(Collection) and deprecate misnamed stream(Collection). Add Streams.failableStream(Stream) and deprecate misnamed stream(Stream). Add EnumUtils.getEnumMap(Class, Function). #730 Add FluentBitSet. Add Streams.instancesOf(Class, Collection). Add ImmutablePair.ofNonNull(L, R). Add ImmutableTriple.ofNonNull(L, M, R). Add MutablePair.ofNonNull(L, R). Add MutableTriple.ofNonNull(L, M, R). Add Pair.ofNonNull(L, R). Add Triple.ofNonNull(L, M, R). Add ArrayUtils.containsAny(Object[], Object...). Add Processor.Type.AARCH_64. Add Processor.isAarch64(). Update ArchUtils.getProcessor(String) for "aarch64". Add JavaVersion.JAVA_18. Add TimeZones.toTimeZone(TimeZone). Add FutureTasks. Add Memoizer(Function) and Memoizer(Function, boolean). Add Consumers. Add github/codeql-action. Add coverage.yml. Add DurationUtils.since(Temporal). Add DurationUtils.of(FailableConsumer|FailableRunnbale). Add ExceptionUtils.forEach(Throwable, Consumer<Throwable>). Add ExceptionUtils.stream(Throwable). Add ExceptionUtils.getRootCauseStackTraceList(Throwable). Add SystemUtils.IS_OS_WINDOWS_11. Add SystemUtils.IS_JAVA_16. Add SystemUtils.IS_JAVA_17. Add SystemUtils.IS_JAVA_18. Add ArrayUtils.oneHot(). Let ReflectionToStringBuilder only reflect given field names #849. Add Streams.of(Enumeration<E>). Add Streams.of(Iterable<E>). Add Streams.of(Iterator<E>). Simple support for Optional in ObjectUtils#isEmpty() #933. Add Processor.Type.getLabel(). Add Processor.toString(). Add HashCodeBuilder.equals(Object). Add BooleanUtils.values() and forEach(). Add ClassPathUtils.packageToPath(String) and pathToPackage(String) Add CalendarUtils#getDayOfYear() #968 Add NumberRange, DoubleRange, IntegerRange, LongRange. Bump actions/cache from 2.1.4 to 3.0.10 #742, #752, #764, #833, #867, #959, #964. Bump actions/checkout from 2 to 3.1.0 #819, #825, #859, #963. Bump actions/setup-java from v1.4.3 to 3.5.1 #879. Bump spotbugs-maven-plugin from 4.2.0 to 4.7.3.0 #735, #808, #822, #834, #868, #895, #919, #927, #946, #989. Bump spotbugs from 4.2.2 to 4.7.3 #744, #917, #947, #973. Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #943. Bump checkstyle from 8.41 to 9.3 #739, #768, #787, #811, #824, #843. Bump easymock from 4.2 to 5.1.0 #746, #972, #986, #1012. Bump commons.jacoco.version from 0.8.6 to 0.8.8. Bump commons.japicmp.version from 0.15.2 to 0.16.0. Bump junit-pioneer from 1.3.8 to 1.9.1 #749, #767, #832, #883, #988, #991, #995. Bump junit-bom from 5.7.1 to 5.9.1 #761, #805, #807, #836, #928, #955. Bump maven-javadoc-plugin from 3.2.0 to 3.4.1. Bump jmh.version from 1.27 to 1.36 #794, #842, #872, #990. Bump maven-pmd-plugin from 3.14.0 to 3.19.0 #802, #858, #909, #948. Bump pmd from 6.40.0 to 6.52.0 #837, #861, #873, #905, #915, #932, #944. Bump biz.aQute.bndlib from 5.3.0 to 6.3.1 #814, #835. Bump maven-bundle-plugin from 5.1.1 to 5.1.2. Bump animal-sniffer-maven-plugin from 1.19 to 1.21. Bump exec-maven-plugin from 1.6.0 to 3.1.0 #590, #922. Bump maven-surefire-plugin from 3.0.0-M5 to 3.0.0-M7 #880, #910. Bump apache-rat from 0.13 to 0.14. Bump commons-parent from 53 to 56 #954, #1000, #1011. Bump commons-text from 1.9 to 1.10.0 #957. Bump commons.pmd-impl.version from 6.49.0 to 6.51.0 #961. Correct implementation of RandomUtils.nextLong(long, long) Restore handling of collections for non-JSON ToStringStyle #610. ContextedException Javadoc add missing semicolon #581. Resolve JUnit pioneer transitive dependencies using JUnit BOM. NumberUtilsTest - incorrect types in min/max tests #634. Improve StringUtils.stripAccents conversion of remaining accents. StringUtils.countMatches - clarify Javadoc. Remove redundant argument from substring call. BigDecimal is created when you pass it the min and max values, #642. ArrayUtils.contains() and indexOf() fail to handle Double.NaN #647. ArrayUtils contains() and indexOf() fail to handle Float.NaN # #561. Fix potential NPE in TypeUtils.isAssignable(Type, ParameterizedType, Map, Type>). TypeUtils.isAssignable returns wrong result for GenericArrayType and ParameterizedType, #643. testGetAllFields and testGetFieldsWithAnnotation sometimes fail. Fix Javadoc for SystemUtils.isJavaVersionAtMost() #638. Fix StringUtils.unwrap throws StringIndexOutOfBoundsException #636. Fix formatting of isAnyBlank() and isAnyEmpty(). #513. TypeUtils. containsTypeVariables does not support GenericArrayType #661. Javadoc of some methods incorrectly refers to another method, #667, #668. #670. Refine StringUtils.lastIndexOfIgnoreCase #664. Refine StringUtils.abbreviate #663. Refine StringUtils.isNumericSpace #573. Refine StringUtils.deleteWhitespace #569. Correction in Javadoc of some methods. #673 Javadoc for RandomStringUtils.random() letters, numbers parameters is wrong. Correct markup in Javadoc for unbalanced braces #679. MethodUtils.invokeMethod NullPointerException in case of null in args list #680. Fix 2 digit week year formatting #688. Fix broken Javadoc links to commons-text #712. Add and use ThreadUtils.sleep(Duration). Add and use ThreadUtils.join(Thread, Duration). Add ObjectUtils.wait(Duration). Add BooleanUtils.booleanValues(). Add BooleanUtils.primitiveValues(). Add StringUtils.containsAnyIgnoreCase(CharSequence, CharSequence...). Add StopWatch.getStopTime(). More test coverage for CharSequenceUtils. #631. ArrayUtils.toPrimitive(Object) does not support boolean and other types #607. Add fluent-style ArraySorter. Add and use LocaleUtils.toLocale(Locale) to avoid NPEs. Add FailableShortSupplier, handy for JDBC APIs. Add JavaVersion.JAVA_17. Add missing boolean[] join method #686. Add StringUtils.substringBefore(String, int). Add Range.INTEGER. Add DurationUtils. Introduce the use of @Nonnull, and @Nullable, and the Objects class as a helper tool. Add and use true and false String constants #714. Add and use ObjectUtils.requireNonEmpty() #716. Enable Dependabot #587. Bump junit-jupiter from 5.6.2 to 5.7.0. Bump spotbugs from 4.1.2 to 4.2.2, #627, #671, #708, #726. Bump spotbugs-maven-plugin from 4.0.0 to 4.2.0, #593, #596, #609, #623, #632, #692. Bump biz.aQute.bndlib from 5.1.1 to 5.3.0 #592, #628, #715. Bump junit-pioneer from 0.6.0 to 1.1.0, #589, #597, #600, #624, #625, #662. Bump checkstyle from 8.34 to 8.41, #594, #614, #637, #665, #706, #722. Bump actions/checkout from v2.3.1 to v2.3.4 #601, #639. Bump actions/setup-java from v1.4.0 to v1.4.2 #612. Update commons.jacoco.version 0.8.5 to 0.8.6 (Fixes Java 15 builds). Update maven-surefire-plugin 2.22.2 -> 3.0.0-M5. Bump maven-pmd-plugin from 3.13.0 to 3.14.0 #660. Bump jmh.version from 1.21 to 1.27 #674. Update commons.japicmp.version 0.14.3 -> 0.15.2. Processor.java: check enum equality with == instead of .equals() method #690. Bump junit-pioneer from 1.1.0 to 1.3.8, #702, #721. Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #705. Bump actions/cache from v2 to v2.1.4 #710. Bump junit-bom from 5.7.0 to 5.7.1 #707. Minor Improvements #701. Minor Improvement: Add final variable.try to make the code read-only #700. Minor Improvement: Remove redundant initializer #699. Use own validator ObjectUtils.anyNull to check null String input #718. Bump commons-parent from 52 to 53 #885. Refine test output for FastDateParserTest CharSequenceUtils.lastIndexOf : remake it remove encoding and docEncoding and use inherited values from commons-parent Fix Javadoc for StringUtils.appendIfMissingIgnoreCase() #507. Simplify null checks in Pair.hashCode() using Objects.hashCode(). #517. Simplify null checks in Triple.hashCode() using Objects.hashCode(). #516. Simplify some if statements in StringUtils. #521. Simplify a null check in the private replaceEach() method of StringUtils. #514. Replace some usages of the ternary operator with calls to Math.max() and Math.min() #512. (Javadoc) Fix return tag for throwableOf*() methods #518. Add ArrayUtils.isSameLength() to compare more array types #430. CharSequenceUtils.regionMatches is wrong dealing with Georgian. Added the Locks class as a convenient possibility to deal with locked objects. Add to Functions: FailableBooleanSupplier, FailableIntSupplier, FailableLongSupplier, FailableDoubleSupplier, and so on. Add ArrayUtils.get(T[], index, T) to provide an out-of-bounds default value. Optimize ArrayUtils::isArrayIndexValid method. #551. Use List.sort instead of Collection.sort #546. Use StandardCharsets.UTF_8 #548. Use Collections.singletonList insteadof Arrays.asList when there be only one element. #549. Refine Javadoc #545. Change array style from `int a[]` to `int[] a` #537. Change from addAll to constructors for some List #536. Fix typos #539. Ignored exception `ignored`, should not be called so #540. Simplify if as some conditions are covered by others #543. StringUtils.replaceEachRepeatedly gives IllegalStateException #505. Add JavaVersion enum constants for Java 14 and 15. #553. Add JavaVersion enum constants for Java 16. Use Java 8 lambdas and Map operations. Change removeLastFieldSeparator to use endsWith #550. Change a Pattern to a static final field, for not letting it compile each time the function invoked. #542. Add ImmutablePair factory methods left() and right(). Add ObjectUtils.toString(Object, Supplier<String>). Fixed Javadocs for setTestRecursive() #556. ToStringBuilder.reflectionToString - Wrong JSON format when object has a List of Enum. [JSON string for maps] ToStringBuilder.reflectionToString doesn't render nested maps correctly. Make org.apache.commons.lang3.CharSequenceUtils.toCharArray(CharSequence) public. Add org.apache.commons.lang3.StringUtils.substringAfter(String, int). Add org.apache.commons.lang3.StringUtils.substringAfterLast(String, int). Correct Javadocs of methods that use Validate.notNull() and replace some uses of Validate.isTrue() with Validate.notNull(). #525. Add allNull() and anyNull() methods to ObjectUtils. #522. org.apache.commons:commons-parent 50 -> 51. org.junit-pioneer:junit-pioneer 0.5.4 -> 0.6.0. org.junit.jupiter:junit-jupiter 5.6.0 -> 5.6.2. com.github.spotbugs:spotbugs 4.0.0 -> 4.0.6. com.puppycrawl.tools:checkstyle 8.29 -> 8.34. commons.surefire.version 3.0.0-M4 -> 3.0.0-M5.. Make test more stable by wrapping assertions in hashset. Generate Javadoc jar on build. Add ExceptionUtils.throwableOfType(Throwable, Class) and friends. Add EMPTY_ARRAY constants to classes in org.apache.commons.lang3.tuple. Add null-safe StringUtils APIs to wrap String#getBytes([Charset|String]). Add zero arg constructor for org.apache.commons.lang3.NotImplementedException. Add ArrayUtils.addFirst() methods. Remove redundant if statements in join methods #411. Trivial: year of release for 3.9 says 2018, should be 2019 Use synchronize on a set created with Collections.synchronizedSet before iterating Add Range.fit(T) to fit a value into a range. commons.japicmp.version 0.13.1 -> 0.14.1. junit-jupiter 5.5.0 -> 5.5.1. Added Functions.as*, and tests thereof, as suggested by Peter Verhas StringUtils.unwrap incorrect throw StringIndexOutOfBoundsException. Add getters for lhs and rhs objects in DiffResult #451. Generify builder classes Diffable, DiffBuilder, and DiffResult #452. Add ClassLoaderUtils with toString() implementations #453. Add null-safe APIs as StringUtils.toRootLowerCase(String) and StringUtils.toRootUpperCase(String) #456. StringIndexOutOfBoundsException in StringUtils.replaceIgnoreCase #423. StringUtils.removeIgnoreCase("İa", "a") throws IndexOutOfBoundsException #423. junit-jupiter 5.5.1 -> 5.5.2. Corrected usage examples in Javadocs #458. Improve Javadoc based on the discussion of the GitHub PR #459. maven-checkstyle-plugin 3.0.0 -> 3.1.0. Update documentation related to the issue LANG-696 #449. AnnotationUtils little cleanup #467. Add org.apache.commons.lang3.time.Calendars. Add EnumUtils getEnum() methods with default values #475. Added indexesOf methods and simplified removeAllOccurences #471. Add support of lambda value evaluation for defaulting methods #416. StringUtils abbreviate returns String of length greater than maxWidth #477. Test may fail due to a different order of fields returned by reflection api #480. Update test dependency: org.easymock:easymock 4.0.2 -> 4.1. Update test dependency: org.hamcrest:hamcrest 2.1 -> 2.2. Update test dependency: org.junit-pioneer:junit-pioneer 0.3.0 -> 0.4.2. Update build dependency: com.puppycrawl.tools:checkstyle 8.18 -> 8.27. Sort fields in ReflectionToStringBuilder for deterministic order #481. Update POM parent: org.apache.commons:commons-parent 48 -> 50. BooleanUtils Javadoc #469. Functions Javadoc #466. Add factory methods to Pair classes with Map.Entry input. #454. Add StopWatch convenience APIs to format times and create a simple instance. Allow a StopWatch to carry an optional message. Add ComparableUtils #398. Add org.apache.commons.lang3.SystemUtils.getUserName(). Add ObjectToStringComparator. #483. Add org.apache.commons.lang3.arch.Processor.Arch.getLabel(). Add IS_JAVA_14 and IS_JAVA_15 to org.apache.commons.lang3.SystemUtils. ObjectUtils: Get first non-null supplier value. Added the Streams class, and Functions.stream() as an accessor thereof. org.easymock:easymock 4.1 -> 4.2. org.junit-pioneer:junit-pioneer 0.4.2 -> 0.5.4. org.junit.jupiter:junit-jupiter 5.5.2 -> 5.6.0. Use Javadoc {@code} instead of pre tags. #490. ExceptionUtilsTest to 100% #486. MethodUtils will throw a NPE if invokeMethod() is called for a var-args method #407. Reuse own code in Functions.java #493. MethodUtils.getAnnotation() with searchSupers = true does not work if super is generic #494. Avoid unnecessary allocation in StringUtils.wrapIfMissing. #496. Internally use Validate.notNull(foo, ...) instead of Validate.isTrue(foo != null, ...). Add 1 and 0 in toBooleanObject(final String str) #502. Remove a redundant argument check in NumberUtils #504. Deprecate org.apache.commons.lang3.ArrayUtils.removeAllOccurences(*) for org.apache.commons.lang3.ArrayUtils.removeAllOccurrences(*). FieldUtils.removeFinalModifier(Field, boolean), in java 12 throw exception because the final modifier is no longer mutable. Switch coverage from cobertura to jacoco. Javadoc pointing to Commons RNG. Add more SystemUtils.IS_JAVA_XX variants. Adding the Functions class. Update to JUnit 5 Add @FunctionalInterface to ThreadPredicate and ThreadGroupPredicate Update Java Language requirement to 1.8 Add isEmpty method to ObjectUtils Add null-safe StringUtils.valueOf(char[]) to delegate to String.valueOf(char[]) Add API org.apache.commons.lang3.SystemUtils.isJavaVersionAtMost(JavaVersion) Consolidate the StringUtils equals and equalsIgnoreCase Javadoc and implementation (doc) Fix javadoc for 'startIndex' parameter of StringUtils.join() methods. GitHub PR #412. Restore BundleSymbolicName for OSGi FastDateParser too strict on abbreviated short month symbols JsonToStringStyle does not escape string names JsonToStringStyle does not escape double quote in a string value New Java version ("11") must be handled ExceptionUtils#getRootCause(Throwable t) should return t if no lower level cause exists NumberUtils.isNumber assumes number starting with Zero defaultString(final String str) in StringUtils to reuse defaultString(final String str, final String defaultStr) Parsing Json Array failed Fix TypeUtils#parameterize to work correctly with narrower-typed array Fix EventCountCircuitBreaker increment batch NumberUtils.createNumber() throws StringIndexOutOfBoundsException instead of NumberFormatException WordUtils.wrap throws StringIndexOutOfBoundsException when wrapLength is Integer.MAX_VALUE. Typo in JavaDoc for lastIndexOf ObjectUtils.identityToString(Object) and friends should allocate builders and buffers with a size EnumUtils.getEnumIgnoreCase and isValidEnumIgnoreCase methods added Add ToStringSummary annotation Add bypass option for classes to recursive and reflective EqualsBuilder Improve Javadoc for StringUtils.isAnyEmpty(null) Add API SystemUtils.String getEnvironmentVariable(final String name, final String defaultValue) org.apache.commons.lang3.SystemUtils should not write to System.err. Add RegexUtils class instead of overloading methods in StringUtils that take a regex to take precompiled Pattern. StringUtils.join() with support for List<?> with configurable start/end indices. Methods for getting first non-empty or non-blank value Remove checks for java versions below the minimum supported one Null/index safe get methods for ArrayUtils Rounding utilities for converting to BigDecimal Fix tests DateUtilsTest for Java 9 with en_GB locale Fix NullPointerException in isJavaVersionAtLeast on Java 10, add SystemUtils.IS_JAVA_10, add JavaVersion.JAVA_10 StackOverflowError on TypeUtils.toString(...) for a generic return type of Enum.valueOf ConstructorUtils.invokeConstructor(Class, Object...) regression EqualsBuilder#isRegistered: swappedPair construction bug org.apache.commons.lang3.time.FastDateParser should use toUpperCase(Locale) Improve StringUtils#replace throughput Remove deprecation from RandomStringUtils ExceptionUtils.getThrowableList() is using deprecated ExceptionUtils.getCause() TimeZone.getTimeZone() in FastDateParser causes resource contention (PR #296.) Add methods to ObjectUtils to get various forms of class names in a null-safe manner Add Automatic-Module-Name MANIFEST entry for Java 9 compatibility Add NUL Byte To CharUtils Fix test failures in IBM JDK 8 for ToStringBuilderTest Add method in StringUtils to determine if string contains both mixed cased characters Deprecate CharEncoding in favour of java.nio.charset.StandardCharsets MultilineRecursiveToStringStyle StackOverflowError when object is an array Increase test coverage of ToStringBuilder class to 100% Add a method in StringUtils to extract only digits out of input string Implement HashSetvBitSetTest using JMH Add JMH maven dependencies Add null filter to ReflectionToStringBuilder LocaleUtils#toLocale does not support language followed by UN M.49 numeric-3 area code followed by variant Clarify or improve behavior of int-based indexOf methods in StringUtils Add method for converting string to an array of code points RandomStringUtils random method can overflow and return characters outside the specified range Add methods to insert arrays into arrays at an index WordUtils.wrap throws StringIndexOutOfBoundsException RandomStringUtils#random can enter infinite loop if end parameter is to small NullPointerException in FastDateParser$TimeZoneStrategy Javadoc of StringUtils.ordinalIndexOf is contradictory. StringUtils#join(T...): warning: [unchecked] Possible heap pollution from parameterized vararg type T Multiple calls of org.apache.commons.lang3.concurrent.LazyInitializer.initialize() are possible. StrBuilder#replaceAll ArrayIndexOutOfBoundsException BooleanUtils javadoc issues ArrayUtils#add confusing example in javadoc StringUtils#isAnyEmpty and #isAnyBlank should return false for an empty array Add StringUtils#unwrap Add support for recursive comparison to EqualsBuilder#reflectionEquals Add a reflection-based variant of DiffBuilder Implementation of a Memoizer Add ArrayUtils#toStringArray method StringUtils#abbreviate should support 'custom ellipses' parameter Add StringUtils#isAllEmpty and #isAllBlank methods Increase test coverage of org.apache.commons.lang3.ArrayUtils StrSubstitutor should state its thread safety StringUtils#getLevenshteinDistance reduce memory consumption Update Java requirement from Java 6 to 7. StringUtils should use toXxxxCase(int) rather than toXxxxCase(char) Add SystemUtils.getHostName() API. Moving apache-rat-plugin configuration into pluginManagement TypeUtils.toString() doesn't handle primitive and Object arrays correctly LocaleUtils#toLocale does not support language followed by UN M.49 numeric-3 area code Build failures when building with Java 9 EA javadoc creation broken with Java 8 Deprecate classes/methods moved to commons-text MethodUtils.invokeMethod throws ArrayStoreException if using varargs arguments and smaller types than the method defines Add ArchUtils - An utility class for the "os.arch" system property Add shuffle methods to ArrayUtils Add MethodUtils#findAnnotation and extend MethodUtils#getMethodsWithAnnotation for non-public, super-class and interface methods Add ImmutablePair.nullPair() Add ImmutableTriple.nullTriple() Added a tryAcquire() method to TimedSemaphore. Added a new property IS_OS_MAC_OSX_EL_CAPITAN in SystemUtils Add DateUtils.toCalendar(Date, TimeZone) Add WordUtils.wrap overload with customizable breakable character Add method removeIgnoreCase(String, String) to StringUtils ArrayUtils.contains returns false for instances of subtypes Prepare Java 9 detection Rename NumberUtils.isNumber, isCreatable to better reflect createNumber. Also, accommodated for "+" symbol as prefix in isCreatable and isNumber. CompareToBuilder.append(Object, Object, Comparator) method is too big to be inlined Remove unnecessary synchronization from registry lookup in EqualsBuilder and HashCodeBuilder Extend RandomStringUtils with methods that generate strings between a min and max length Handle "void" in ClassUtils.getClass() SerializationUtils#deserialize has unnecessary code and a comment for that Javadoc for ArrayUtils.isNotEmpty() is slightly misleading Add APIs StringUtils.wrapIfMissing(String, char|String) TypeUtils.isAssignable throws NullPointerException when fromType has type variables and toType generic superclass specifies type variable StringUtils#normalizeSpace does not trim the string anymore SerializationUtils.ClassLoaderAwareObjectInputStream should use static initializer to initialize primitiveTypes map [GitHub issue #170] Add RandomUtils#nextBoolean() method FastDatePrinter Memory allocation regression FastDatePrinter generates extra Date objects Fix precision loss on NumberUtils.createNumber(String) HashCodeBuilder.append(Object,Object) is too big to be inlined, which prevents whole builder to be scalarized Add a circuit breaker implementation Add StringUtils.truncate() Enhance MethodUtils to allow invocation of private methods Fix implementation of StringUtils.getJaroWinklerDistance() Fix dead links in StringUtils.getLevenshteinDistance() javadoc "\u2284":"nsub" mapping missing from EntityArrays#HTML40_EXTENDED_ESCAPE Simplify ArrayUtils removeElements by using new decrementAndGet() method Add getAndIncrement/getAndDecrement/getAndAdd/incrementAndGet/decrementAndGet/addAndGet in Mutable* classes Optimize BitField constructor implementation Improve CharSetUtils.squeeze() performance Add RandomStringUtils#randomGraph and #randomPrint which match corresponding regular expression class StringUtils#startsWithAny/endsWithAny is case-sensitive - documented as case insensitive Add StopWatch#getTime(TimeUnit) Add methods to ObjectUtils class to check for null elements in the array Prefer Throwable.getCause() in ExceptionUtils.getCause() DiffBuilder add method to allow appending from a DiffResult Improve ArrayUtils removeElements time complexity to O(n) getLevenshteinDistance with a threshold: optimize implementation if the strings lengths differ more than the threshold Add SystemUtils.IS_OS_WINDOWS_10 property DiffBuilder: Add null check on fieldName when appending Object or Object[] ArrayUtils.removeAll(Object array, int... indices) should do the clone, not its callers Performance improvements for NumberUtils.isParsable StringUtils.stripAccents should remove accents from "Ł" and "ł". EqualsBuilder.append(Object,Object) is too big to be inlined, which prevents whole builder to be scalarized NumberUtils.createNumber() behaves inconsistently with NumberUtils.isNumber() Add support for varargs in ConstructorUtils, MemberUtils, and MethodUtils Add methods to check numbers against NaN and infinite to Validate Fix for incorrect comment on StringUtils.containsIgnoreCase method Fix typo on appendIfMissing javadoc Add tests for missed branches in DateUtils parseDateStrictly doesn't pass specified locale FastDateFormat doesn't respect summer daylight in some localized strings z/OS identification in SystemUtils StringUtils#startsWithAny has error in Javadoc StrSubstitutor can preserve escapes Remove Ant-based build FastDateFormat support of the week-year component (uppercase 'Y') Limit max heap memory for consistent Travis CI build Fix NullPointerException in FastDateParser$TimeZoneStrategy ordinalIndexOf("abc", "ab", 1) gives incorrect answer of -1 (correct answer should be 0); revert fix for LANG-1077 Clarify Javadoc of StringUtils.containsAny() Add StringUtils methods to compare a string to multiple strings Add remove by regular expression methods in StringUtils Making replacePattern/removePattern methods null safe in StringUtils Add replace by regular expression methods in StringUtils Add compare methods in StringUtils Add sugar to RandomUtils Replace StringBuilder with String concatenation for better optimization Deprecate SystemUtils.FILE_SEPARATOR and SystemUtils.PATH_SEPARATOR FastDateFormat APIs that use a StringBuilder Ability to throw checked exceptions without declaring them Several predefined ISO FastDateFormats in DateFormatUtils are incorrect StringIndexOutOfBoundsException or field over-write for large year fields in FastDateParser Implement ParsePosition api for FastDateParser StrLookup.systemPropertiesLookup() no longer reacts on changes on system properties EnumUtils *BitVector issue with more than 32 values Enum Capitalize javadoc is incorrect Add check for duplicate event listener in EventListenerSupport FastDateParser_TimeZoneStrategyTest#testTimeZoneStrategyPattern fails on Windows with German Locale Add method containsAllWords to WordUtils ReflectionToStringBuilder doesn't throw IllegalArgumentException when the constructor's object param is null Inconsistent behavior of swap for malformed inputs StringUtils join with var args Fix critical issues reported by SonarQube StrBuilder.equals(StrBuilder) doesn't check for null inputs Add ThreadUtils - A utility class which provides helper methods related to java.lang.Thread Add annotations to exclude fields from ReflectionEqualsBuilder, ReflectionToStringBuilder and ReflectionHashCodeBuilder Use JUnit rules to set and reset the default Locale and TimeZone JsonToStringStyle doesn't handle chars and objects correctly DateFormatUtilsTest.testSMTP depends on the default Locale Unit test FastDatePrinterTimeZonesTest needs a timezone set CLONE - DateFormatUtils.format does not correctly change Calendar TimeZone in certain situations DateUtilsTest.testLang530 fails for some timezones TypeUtils.ParameterizedType#equals doesn't work with wildcard types Add rotate(string, int) method to StringUtils StringUtils.repeat('z', -1) throws NegativeArraySizeException Add swap and shift operations for arrays to ArrayUtils TypeUtils.parameterizeWithOwner - wrong format descriptor for "invalid number of type parameters". MultilineRecursiveToStringStyle largely unusable due to being package-private. StringUtils.uncapitalize performance improvement CharSet.getInstance documentation does not clearly explain how to include negation character in set Change nullToEmpty methods to generics Fix FindBugs warnings in DurationFormatUtils Add a method to ArrayUtils for removing all occurrences of a given element Fix parsing edge cases in FastDateParser StringUtils#equals fails with Index OOBE on non-Strings with identical leading prefix There are no tests for CharSequenceUtils.regionMatches StringUtils.ordinalIndexOf: Add missing right parenthesis in Javadoc example Incorrect Javadoc StringUtils.containsAny(CharSequence, CharSequence...) Added new property IS_OS_MAC_OSX_EL_CAPITAN in SystemUtils Support OS X versions in SystemUtils SystemUtils.IS_OS_WINDOWS_2008, VISTA are incorrect Parse test fails for TimeZone America/Sao_Paulo Add SystemUtils.IS_JAVA_1_9 Make logic for comparing OS versions in SystemUtils smarter Shutdown thread pools in test cases FastDateParser and FastDatePrinter support 'X' format Avoid memory allocation when using date formatting to StringBuffer Possible performance improvement on string escape functions Exception while using ExtendedMessageFormat and escaping braces Avoid String allocation in StrBuilder.append(CharSequence) Update maven-checkstyle-plugin to 2.14 Update org.easymock:easymock to 3.3.1 Update maven-pmd-plugin to 3.4 Update maven-antrun-plugin to 1.8 Wrong formatting of time zones with daylight saving time in FastDatePrinter Performance improvements for StringEscapeUtils Add ClassUtils.getAbbreviatedName() FastDateParser does not set error indication in ParsePosition FastDateParser does not handle excess hours as per SimpleDateFormat FastDateParser error - timezones not handled correctly NumberUtils#createNumber() returns positive BigDecimal when negative Float is expected DiffBuilder.append(String, Object left, Object right) does not do a left.equals(right) check StrSubstitutor.replaceSystemProperties does not work consistently Add option to disable the "objectsTriviallyEqual" test in DiffBuilder Add (T) casts to get unit tests to pass in old JDK Add JsonToStringStyle implementation to ToStringStyle Add NoClassNameToStringStyle implementation of ToStringStyle Fix wrong examples in Javadoc of StringUtils.replaceEachRepeatedly(...), StringUtils.replaceEach(...) Add StringUtils.containsAny(CharSequence, CharSequence...) method Read wrong component type of array in add in ArrayUtils StringUtils.ordinalIndexOf("aaaaaa", "aa", 2) != 3 in StringUtils Duplicated "0x" check in createBigInteger in NumberUtils StringUtils.abbreviate description doesn't agree with the examples Multiline recursive to string style Add isSorted() to ArrayUtils Fix MethodUtilsTest so it does not depend on JDK method ordering CompareToBuilder's doc doesn't specify precedence of fields it uses in performing comparisons ParseException when trying to parse UTC dates with Z as zone designator using DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT Javadoc for EqualsBuilder.reflectionEquals() is unclear Improve performance of normalize space Add StringUtils.countMatches(CharSequence, char) org.apache.commons.lang3.SystemUtils#isJavaVersionAtLeast should return true by default Provide methods to retrieve all fields/methods annotated with a specific type Bring static method references in StringUtils to consistent style NumberUtils#isParsable method(s) Use non-ASCII digits in Javadoc examples for StringUtils.isNumeric Change min/max methods in NumberUtils/IEEE754rUtils from array input parameters to varargs Add fuzzy String matching logic to StringUtils Add wrap (with String or char) to StringUtils Extend DurationFormatUtils#formatDurationISO default pattern to match #formatDurationHMS Fixing NumberUtils JAVADoc comments for max methods Better Javadoc for BitField class DurationFormatUtils#formatDurationHMS implementation does not correspond to Javadoc and vice versa DurationFormatUtils are not able to handle negative durations/periods ISO 8601 misspelled throughout the Javadocs Add zero copy read method to StrBuilder Add zero copy write method to StrBuilder Javadoc is not clear on preferred pattern to instantiate FastDateParser / FastDatePrinter FastDateParser should be case insensitive Fix bug with stripping spaces on last line in WordUtils.wrap() Add method org.apache.commons.lang3.reflect.MethodUtils.invokeExactMethod(Object, String) Add method org.apache.commons.lang3.reflect.MethodUtils.invokeMethod(Object, String) NumberUtils#isNumber() returns false for "0.0", "0.4790", et al Add org.apache.commons.lang3.SystemUtils.IS_JAVA_1_8 DateUtils.getFragmentInDays(Date, Calendar.MONTH) returns wrong days DurationFormatUtils does not describe format string fully DurationFormatUtils#lexx does not detect unmatched quote char DurationFormatUtils does not handle large durations correctly DurationFormatUtils.formatDuration(61999, "s.SSSS") - ms field size should be 4 digits Failing tests with Java 8 b128 ReflectionToStringBuilder.toString does not debug 3rd party object fields within 3rd party object Add methods for removing all invalid characters according to XML 1.0 and XML 1.1 in an input string to StringEscapeUtils NumericEntityEscaper incorrectly encodes supplementary characters Make some private fields final NumberUtils#isNumber(String) fails to reject invalid Octal numbers NumberUtils#isNumber does not allow for hex 0XABCD StringUtils.toEncodedString(byte[], Charset) needlessly throws UnsupportedEncodingException Add APIs MutableBoolean setTrue() and setFalse() ConstantInitializerTest fails when building with IBM JDK 7 Add SerializationUtils.roundtrip(T extends Serializable) to serialize then deserialize org.apache.commons.lang3.reflect.FieldUtils.removeFinalModifier(Field) does not clean up after itself FastDateParser javadoc incorrectly states that SimpleDateFormat is used internally There should be a DifferenceBuilder with a ReflectionDifferenceBuilder implementation uncaught PatternSyntaxException in FastDateFormat on Android Improve Javadoc of WordUtils.wrap methods Add the Jaro-Winkler string distance algorithm to StringUtils StringUtils.getLevenshteinDistance with too big of a threshold returns wrong result Test DurationFormatUtilsTest.testEdgeDuration fails in JDK 1.6, 1.7 and 1.8, BRST time zone ConstructorUtils.getAccessibleConstructor() Does Not Check the Accessibility of Enclosing Classes Fragments are wrong by 1 day when using fragment YEAR or MONTH New class ClassPathUtils with methods for turning FQN into resource path Move Documentation from user guide to package-info files Convert package.html files to package-info.java files FastDateParser does not handle two digit year parsing like SimpleDateFormat FastDateParserTest.testParses does not test FastDateParser Fix deprecation warnings EnumUtils.generateBitVector needs a "? extends" Validate: add inclusiveBetween and exclusiveBetween overloads for primitive types New RandomUtils class Wrong locale handling in LocaleUtils.toLocale() Add IBM OS/400 detection Fix missing Hamcrest dependency in Ant Build Test failure in LocaleUtilsTest when building with JDK 8 Test failure in FastDateParserTest and FastDateFormat_ParserTest when building with JDK8 Build fails with test failures when building with JDK 8 Add removeFinalModifier to FieldUtils Method returns number of inheritance hops between parent and subclass Spelling fixes Misleading Javadoc comment in StrBuilderReader class OctalUnescaper tried to parse all of \279 OctalUnescaper had bugs when parsing octals starting with a zero EqualsBuilder returned true when comparing arrays, even when the elements are different Added isStarted, isSuspended and isStopped to StopWatch Fixed exception when combining custom and choice format in ExtendedMessageFormat Added StringUtils.isBlank/isEmpty CharSequence... methods Added ArrayUtils.reverse(array, from, to) methods StringUtils.toString(byte[], String) deprecated in favour of a new StringUtils.toString(byte[], CharSet) RandomStringUtils.random javadoc was incorrectly promising letters and numbers would, as opposed to may, appear BooleanUtils.xor(boolean...) produces wrong results StringUtils.normalizeSpace now handles non-breaking spaces (Unicode 00A0) Redundant check for zero in HashCodeBuilder ctor StrSubstitutor now supports default values for variables Adding .gitignore to commons-lang Add ObjectUtils.toIdentityString methods that support StringBuilder, StrBuilder, and Appendable BooleanUtils.toBoolean(String str) javadoc is not updated LocaleUtils test fails with new Locale "ja_JP_JP_#u-ca-japanese" of JDK7 StrSubstitutor does not support StringBuilder or CharSequence Method createNumber from NumberUtils doesn't work for floating point numbers other than Float FastDateFormat does not use the locale specific cache correctly Simplify FastDateFormat; eliminate boxing LookupTranslator now works with implementations of CharSequence other than String ClassUtils.getShortName(String) will now only do a reverse lookup for array types Added CharSetUtils.containsAny(String, String) Provide CharSequenceUtils.regionMatches with a proper green implementation instead of inefficiently converting to Strings Added escape/unescapeJson to StringEscapeUtils Added appendIfMissing and prependIfMissing methods to StringUtils NumberUtils.createNumber() Javadoc says it does not work for octal numbers Fixed URLs in javadoc to point to new oracle.com pages Add StringUtils.LF and StringUtils.CR values Add FieldUtils getAllFields() to return all the fields defined in the given class and super classes LocaleUtils.toLocale does not parse strings starting with an underscore StrBuilder should support StringBuilder as an input parameter StringEscapeUtils.escapeJava() and escapeEcmaScript() do not output the escaped surrogate pairs that are Java parsable StringIndexOutOfBoundsException in CharSequenceTranslator Code refactoring in NumberUtils NumberUtils#createBigInteger does not allow for hex and octal numbers NumberUtils#createNumber - does not allow for hex numbers to be larger than Long StringUtils join APIs for primitives FastDateFormat and FastDatePrinter generates Date objects wastefully Spelling fixes Fix examples contained in javadoc of StringUtils.center methods Add StringUtils API to call String.replaceAll in DOTALL a.k.a. single-line mode ArrayUtils removeElements methods use unnecessary HashSet ArrayUtils removeElements methods clone temporary index arrays unnecessarily FastDateParser does not handle unterminated quotes correctly FastDateParser does not handle white-space properly FastDateParser could use \Q \E to quote regexes FastDateParser does not handle non-Gregorian calendars properly FastDateParser does not handle non-ASCII digits correctly Create StrBuilder APIs similar to String.format(String, Object...) NumberUtils#createNumber - bad behavior for leading "--" FastDateFormat's "z" pattern does not respect timezone of Calendar instances passed to format() Add org.apache.commons.lang3.SystemUtils.IS_OS_WINDOWS_8 StringUtils.equalsIgnoreCase doesn't check string reference equality StringUtils.join() endIndex, bugged for loop RandomStringUtils throws confusing IAE when end <= start RandomStringUtils.random(count, 0, 0, false, false, universe, random) always throws java.lang.ArrayIndexOutOfBoundsException LocaleUtils - unnecessary recursive call in SyncAvoid class. Javadoc bug in DateUtils#ceiling for Calendar and Object versions. DateUtils#parseDate uses default locale; add Locale support Use generics in SerializationUtils SerializationUtils throws ClassNotFoundException when cloning primitive classes StringUtils equals() relies on undefined behavior Documentation bug: StringUtils.split jar contains velocity template of release notes TypeUtilsTest contains incorrect type assignability assertion TypeUtils.getTypeArguments() misses type arguments for partially-assigned classes ImmutablePair doc contains nonsense text ClassUtils.PACKAGE_SEPARATOR Javadoc contains garbage text EventListenerSupport.ProxyInvocationHandler no longer defines serialVersionUID StrBuilder is now serializable Fix Javadoc Ant warnings NumberUtils does not handle Long Hex numbers Javadoc bug in static inner class DateIterator Add Triple class (ternary version of Pair) FastDateFormat supports parse methods Add API StringUtils.toString(byte[] input, String charsetName) Add an example with whitespace in StringUtils.defaultIfEmpty Add APIs ClassUtils.isPrimitiveWrapper(Class<?>) and isPrimitiveOrWrapper(Class<?>) Fix createLong() so it behaves like createInteger() Include the actual type in the Validate.isInstance and isAssignableFrom exception messages Incorrect Bundle-SymbolicName in Manifest Deprecating chomp(String, String) NumberUtils does not handle upper-case hex: 0X and -0X StringUtils throws java.security.AccessControlException on Google App Engine Ant build has wrong component.name CharUtils static final array CHAR_STRING is not needed to compute CHAR_STRING_ARRAY Document that the Mutable numbers don't work as expected with String.format SystemUtils.IS_OS_UNIX doesn't recognize FreeBSD as a Unix system SerializationUtils.clone: Fallback to context classloader if class not found in current classloader. ToStringBuilderTest.testReflectionHierarchyArrayList fails with IBM JDK 6. StringEscapeUtils.escapeXml(input) wrong when input contains characters in Supplementary Planes. StringEscapeUtils.escapeEcmaScript from lang3 cuts off long unicode string. Improve exception message when StringUtils.replaceEachRepeatedly detects recursion. Specify source encoding for Ant build. Complement ArrayUtils.addAll() variants with by-index and by-value removal methods. Add Range<T> Range<T>.intersectionWith(Range<T>). Add mode and median Comparable... methods to ObjectUtils. Add BooleanUtils.and + or varargs methods. EnumSet -> bit vector. The CHAR_ARRAY cache in CharUtils duplicates the cache in java.lang.Character. Deprecate CharUtils.toCharacterObject(char) in favor of java.lang.Character.valueOf(char). Missing method getRawMessage for ContextedException and ContextedRuntimeException. Use internal Java's Number caches instead creating new objects. StringEscapeUtils.escapeXml(input) outputs wrong results when an input contains characters in Supplementary Planes. build.xml Java 1.5+ updates. swapCase and *capitalize speedups. CharSetUtils.squeeze() speedup. StringUtils doc/comment spelling fixes. Increase test coverage of FieldUtils read methods and tweak Javadoc. Add includeantruntime=false to javac targets to quell warnings in ant 1.8.1 and better (and modest performance gain). StringIndexOutOfBoundsException when calling unescapeHtml4("&#03"). StringEscapeUtils.escapeEcmaScript from lang3 cuts off long Unicode string. StringUtils.join throws NPE when toString returns null for one of objects in collection. Add FormattableUtils class. Add ClassUtils.getSimpleName() methods. Add hashCodeMulti varargs method. Removed DateUtils.UTC_TIME_ZONE. Convert more of the StringUtils API to take CharSequence. EqualsBuilder synchronizes on HashCodeBuilder. StringUtils.isAlpha, isAlphanumeric and isNumeric now return false for "". Add support for ConcurrentMap.putIfAbsent(). Documented potential NPE if auto-boxing occurs for some BooleanUtils methods. DateUtils.isSameLocalTime compares using 12-hour clock and not 24-hour. Extend exception handling in ConcurrentUtils to runtime exceptions. SystemUtils.getJavaVersionAsFloat throws StringIndexOutOfBoundsException on Android runtime/Dalvik VM. WordUtils.abbreviate() removed. Doc bug in DateUtils#ceiling. StringEscapeUtils.unescapeJava doesn't handle octal escapes and Unicode with extra u. org.apache.commons.lang3.math.Fraction does not reduce (Integer.MIN_VALUE, 2^k). org.apache.commons.lang3.math.Fraction does not always succeed in multiplyBy and divideBy. Change ObjectUtils min() & max() functions to use varargs rather than just two parameters. Add a Null-safe compare() method to ObjectUtils. NumberUtils.isNumber(String) is not right when the String is "1.1L". EntityArrays typo: {"\u2122", "&minus;"}, // minus sign, U+2212 ISOtech. Some entities like &Ouml; are not matched properly against its ISO8859-1 representation. Example StringUtils.indexOfAnyBut("zzabyycdxx", '') = 0 incorrect. Add StringUtils.defaultIfBlank(). Provide a very basic ConcurrentInitializer implementation. Support lazy initialization using atomic variables. Enhance StrSubstitutor to support nested ${var-${subvr}} expansion. Provide documentation about the new concurrent package. Charset may not be threadsafe, because the HashSet is not synch. StringEscapeUtils.escapeXML() can't process UTF-16 supplementary characters. StringUtils.endsWithAny method. Add AnnotationUtils. BooleanUtils.toBooleanObject to support single character input. FastDateFormat.format() outputs incorrect week of year because locale isn't respected. StrSubstitutor should also handle the default properties of a java.util.Properties class. Javadoc StringUtils.left() claims to throw on negative len, but doesn't. Add normalizeSpace to StringUtils. NumberUtils createNumber throws a StringIndexOutOfBoundsException when argument containing "e" and "E" is passed in. NOTE: The below were included in the Commons Lang 3.0-beta release. Convert StringUtils API to take CharSequence. Push down WordUtils to "text" sub-package. Extend exception handling in ConcurrentUtils to runtime exceptions. Some StringUtils methods should take an int character instead of char to use String API features. EqualsBuilder causes StackOverflowException. DefaultExceptionContext overwrites values in recursive situations. ContextedRuntimeException no longer an 'unchecked' exception. Add Builder Interface / Update Builders to Implement It. Javadoc is incorrect for public static int lastIndexOf(String str, String searchStr). ClassUtils.getClass(): Allow Dots as Inner Class Separators. DateUtils equal & compare functions up to most significant field. Remove JDK 1.2/1.3 bug handling in StringUtils.indexOf(String, String, int). Create a basic Pair<L, R> class. exception.DefaultExceptionContext.getFormattedExceptionMessage catches Throwable. Provide an implementation of the ThreadFactory interface. Add new Validate methods. ArrayUtils.add(T[] array, T element) can create unexpected ClassCastException. Do the test cases really still require main() and suite() methods?. @SuppressWarnings("unchecked") is used too generally. Improve StrLookup API documentation. Change Java package name. Change Maven groupId. New TimedSemaphore class. Added validState validation method. Added isAssignableFrom and isInstanceOf validation methods. Add TypeUtils class to provide utility code for working with generic types. Replace Range classes with generic version. Use Iterable on API instead of Collection. Add methods to Validate to check whether the index is valid for the array/list/string. Add ability to create a Future for a constant. Replace StringBuffer with StringBuilder. Make NumericEntityEscaper immutable. Compile commons.lang for CDC 1.1/Foundation 1.1. Add ArrayUtils.toArray to create generic arrays. Validate: support for validating blank strings. Add a concurrent package. Mutable classes should implement an appropriately typed Mutable interface. Better EnumUtils. StringEscapeUtils.unescapeJava should support \u+ notation. Rewrite StringEscapeUtils. bring ArrayUtils.isEmpty to the generics world. Add support for background initialization. Add support for the handling of ExecutionExceptions. Add StringEscapeUtils.escapeText() methods. Addition of ContextedException and ContextedRuntimeException. A generic implementation of the Lazy initialization pattern. Remove code that does not hold enough value to remain. Remove code handled now by the JDK. StrSubstitutor now supports substitution in variable names. Possible race-conditions in hashCode of the range classes. StringEscapeUtils.escapeHtml incorrectly converts Unicode characters above U+00FFFF into 2 characters. Document where in SVN trunk is. StopWatch does not resist to system time changes. Fixes for thread safety. Refactor Validate.java to eliminate code redundancy. Lower Ascii Characters don't get encoded by Entities.java. StringUtils.emptyToNull. StringEscapeUtils.escapeHTML() does not escape chars (0x00-0x20). Remove @deprecateds. Add ClassUtils.isAssignable() variants with autoboxing. Improve Javadoc for StringUtils class. Javadoc incorrect for StringUtils.endsWithIgnoreCase. Investigate for vararg usages. JDK 1.5 build/runtime failure on LANG-393 (EqualsBuilder). LeftOf/RightOfNumber in Range convenience methods necessary. ExceptionUtils not thread-safe. ObjectUtils.coalesce. StrBuilder should implement CharSequence and Appendable. StringEscapeUtils.escapeHtml() escapes multibyte characters like Chinese, Japanese, etc. Finally start using generics. StrBuilder does not implement clone(). EnumUtils for JDK 5.0. Wish : method unaccent. MutableBigDecimal and MutableBigInteger. StringEscaper.escapeXml() escapes characters > 0x7f. Depend on JDK 1.5+. BooleanUtils: use same optimization in toBooleanObject(String) as in toBoolean(String). ClassUtils: allow Dots as Inner Class Separators in getClass(). DateUtils: equal and compare functions up to most significant field. DateUtils: provide a Date to Calendar convenience method. ObjectUtils: add clone methods to ObjectUtils. ObjectUtils: add a Null-safe compare() method. ObjectUtils: add notEqual() method. StrBuilder: implement clone() method. StringUtils: add a normalizeSpace() method. StringUtils: add endsWithAny() method. StringUtils: add defaultIfBlank() method. StrSubstitutor: add a replace(String, Properties) variant. StrSubstitutor: support substitution in variable names. Use StrBuilder instead of StringBuffer to improve performance where sync. is not an issue. CharSet: make the underlying set synchronized. CompareToBuilder: fix passing along compareTransients to the reflectionCompare method. ExtendedMessageFormat doesn't override equals(Object). FastDateFormat: fix to properly include the locale when formatting a Date. NumberUtils: createNumber() throws a StringIndexOutOfBoundsException when argument containing "e" and "E" is passed in. StringUtils methods do not handle Unicode 2.0+ supplementary characters correctly. SystemUtils: getJavaVersionAsFloat throws StringIndexOutOfBoundsException on Android runtime/Dalvik VM. MemberUtils: getMatchingAccessibleMethod does not correctly handle inheritance and method overloading. Javadoc is incorrect for lastIndexOf() method. Javadoc for HashCodeBuilder.append(boolean) does not match implementation. Javadoc StringUtils.left() claims to throw an exception on negative length, but doesn't. Javadoc - document thread safety. Test for StringUtils replaceChars() icelandic characters. ArrayUtils - add isNotEmpty() methods. ArrayUtils - add nullToEmpty() methods. CharRange - provide an iterator that lets you walk the chars in the range. CharRange - add more readable static builder methods. ClassUtils - new isAssignable() methods with autoboxing. ClassUtils - add support to getShortClassName and getPackageName for arrays. DateUtils - add ceiling() method. DateUtils - add parseDateStrictly() method. EqualsBuilder - add reset() method. NumberUtils - add toByte() and toShort() methods. Mutable numbers - add string constructors. MutableBoolean - add toBoolean(), isTrue() and isFalse() methods. StrBuilder - add appendSeparator() methods with an alternative default separator if the StrBuilder is currently empty. SystemUtils - add IS_OS_WINDOWS_7 constant. SystemUtils - add IS_JAVA_1_7 constant for JDK 1.7. StringUtils - add abbreviateMiddle() method. StringUtils - add indexOfIgnoreCase() and lastIndexOfIgnoreCase() methods. StringUtils - add isAllUpperCase() and isAllLowerCase() methods. StringUtils - add lastOrdinalIndexOf() method to complement the existing ordinalIndexOf() method. StringUtils - add repeat() method. StringUtils - add startsWithAny() method. StringUtils - add upperCase(String, Locale) and lowerCase(String, Locale) methods. New Reflection package containing ConstructorUtils, FieldUtils, MemberUtils and MethodUtils. ArrayUtils - addAll() does not handle mixed types very well. CharSet - Synchronizing the COMMON Map so that getInstance doesn't miss a put from a subclass in another thread. ClassUtils - improving performance of getAllInterfaces. ClassUtils - toClass() throws NullPointerException on null array element. DateUtils - Fix parseDate() cannot parse ISO8601 dates produced by FastDateFormat. DateUtils - round() doesn't work correct for Calendar.AM_PM. DateUtils - improve tests. Entities - multithreaded initialization. Entities - missing final modifiers; thread-safety issues. EnumUtils - getEnum() doesn't work well in 1.5+. ExceptionUtils - use immutable lock target. ExtendedMessageFormat - OutOfMemory with a pattern containing single quotes. FastDateFormat - call getTime() on a calendar to ensure timezone is in the right state. FastDateFormat - Remove unused field. LocaleUtils - Initialization of available locales in LocaleUtils can be deferred. NumberUtils - createNumber() throws a StringIndexOutOfBoundsException when only an "l" is passed in. NumberUtils - isNumber(String) and createNumber(String) both modified to support '2.'. StringUtils - improve handling of case-insensitive Strings. StringUtils - replaceEach() no longer NPEs when null appears in the last String[]. StringUtils - correct Javadoc for startsWith() and startsWithIgnoreCase(). StringEscapeUtils - escapeJava() escapes '/' characters. StringEscapeUtils - change escapeJavaStyleString() to throw UnhandledException instead swallowing IOException and returning null. WordUtils - fix StringIndexOutOfBoundsException when lower is greater than the String length. StrBuilder - Performance improvement by doubling the size of the String in ensureCapacity. Compare, Equals and HashCode builders - use ArrayUtils to avoid creating a temporary List. EqualsBuilder - removing the special handling of BigDecimal (LANG-393) to use compareTo instead of equals because it creates an inequality with HashCodeBuilder. HashCodeBuilder - Performance improvement: check for isArray to short-circuit the 9 instanceof checks. HashCodeBuilder - Changing the hashCode() method to return toHashCode(). HashCodeBuilder - reflectionHashCode() can generate incorrect hashcodes. HashCodeBuilder and ToStringStyle - use of ThreadLocal causes memory leaks in container environments. ToStringBuilder - make default style thread-safe. RandomUtils - nextLong() always produces even numbers. RandomUtils - RandomUtils tests are failing frequently. ClassUtils.getShortClassName(String) inefficient. Shouldn't Commons Lang's StringUtils have a "common" string method?. FastDateFormat getDateInstance() and getDateTimeInstance() assume Locale.getDefault() won't change. OSGi-ify Lang. StrBuilder appendFixedWidth does not handle nulls. infinite loop in Fraction.reduce when numerator == 0. FastDateFormat thread safety. ClassUtils.getShortClassName and ClassUtils.getPackageName and class of array. LocaleUtils.toLocale() rejects strings with only language+variant. Enum is not thread-safe. BooleanUtils.toBoolean() - invalid drop-thru in case statement causes StringIndexOutOfBoundsException. ArrayUtils.toClass. Why does appendIdentityToString return null?. NumberUtils.min(floatArray) returns wrong value if floatArray[0] happens to be Float.NaN. Dates.round() behaves incorrectly for minutes and seconds. StringUtils.length(String) returns null-safe length. adding a StringUtils.replace method that takes an array or List of replacement strings. Adding functionality to DateUtils to allow direct setting of various fields. Add escaping for CSV columns to StringEscapeUtils. StringUtils: startsWith / endsWith / startsWithIgnoreCase / endsWithIgnoreCase / removeStartIgnoreCase / removeEndIgnoreCase methods. Extension to ClassUtils: Obtain the primitive class from a wrapper. Javadoc bugs - cannot find object. Optimize HashCodeBuilder.append(Object). https://commons.apache.org/proper/commons-lang/developerguide.html "Building" section is incorrect and incomplete. Ambiguous / confusing names in StringUtils replace* methods. Add new splitByWholeSeparatorPreserveAllTokens() methods to StringUtils. Add getStartTime to StopWatch. Perhaps add containsAny() methods?. Javadoc Example for EqualsBuilder is questionable. EqualsBuilder don't compare BigDecimals correctly. Split camel case strings. Add Calendar flavour format methods to DateFormatUtils. Calculating A date fragment in any time-unit. Memory usage improvement for StringUtils#getLevenshteinDistance(). Add ExtendedMessageFormat to org.apache.commons.lang.text. StringEscapeUtils.escapeJavaScript() method did not escape '/' into '\/', it will make IE render page incorrectly. Add toArray() method to IntRange and LongRange classes. add SystemUtils.IS_OS_WINDOWS_VISTA field. Pointless synchronized in ThreadLocal.initialValue should be removed. ToStringStyle Javadoc should show examples of styles. Documentation bug for ignoreEmptyTokens accessors in StrTokenizer. BooleanUtils toBooleanObject Javadoc does not match implementation. truncateNicely method which avoids truncating in the middle of a word. Use of enum prevents a classloader from being garbage collected resulting in out of memory exceptions. NumberUtils.max(byte[]) and NumberUtils.min(byte[]) are missing. Null-safe comparison methods for finding the most recent / least recent dates. StopWatch: suspend() acts as split(), if followed by stop(). StrBuilder.replaceAll and StrBuilder.deleteAll can throw ArrayIndexOutOfBoundsException. Bug in method appendFixedWidthPadRight of class StrBuilder causes an ArrayIndexOutOfBoundsException. ToStringBuilder throws StackOverflowError when an Object cycle exists. Create more tests to test out the +=31 replacement code in DurationFormatUtils. StrBuilder contains usages of thisBuf.length when they should use size. Enum Javadoc: 1) outline 5.0 native Enum migration 2) warn not to use the switch() , 3) point out approaches for persistence and gui. Wrong behavior of Entities.unescape. NumberUtils.createNumber throws NumberFormatException for one digit long. NullPointerException in isAvailableLocale(Locale). FastDateFormat.mRules is not transient or serializable. StringUtils.join should allow you to pass a range for it (so it only joins a part of the array). Refactor Entities methods. Tests fail to pass when building with Maven 2. DurationFormatUtils returns wrong result. unescapeXml("&12345678;") should be "&12345678;". Optimize StringEscapeUtils.unescapeXml(String). BooleanUtils isNotTrue/isNotFalse. Extra StrBuilder methods. Add a pair of StringUtils.substringsBetween;String[] methods. HashCodeBuilder throws java.lang.StackOverflowError when an object contains a cycle. Wish for StringUtils.join(Collection, *). StrBuilderTest#testReplaceStringString fails. EqualsBuilder.append(Object[], Object[]) crashes with a NullPointerException if an element of the first array is null. Serialization - not backwards compatible. Replace Clover with Cobertura. ValuedEnum.compareTo(Object other) not typesafe - it easily could be... LocaleUtils test fails under Mustang. Javadoc example for StringUtils.splitByWholeSeparator incorrect. PADDING array in StringUtils overflows on '\uffff'. ClassUtils.primitiveToWrapper and Void. unit test for org.apache.commons.lang.text.StrBuilder. DateUtils.truncate method is buggy when dealing with DST switching hours. RandomStringUtils.random() family of methods create invalid Unicode sequences. StringUtils#getLevenshteinDistance() performance is sub-optimal. Wrong length check in StrTokenizer.StringMatcher. ExceptionUtils goes into infinite loop in getThrowables is throwable.getCause() == throwable. FastDateFormat: wrong format for date "01.01.1000". Unclear Javadoc for DateUtils.iterator(). Memory "leak" in StringUtils. StringEscapeUtils should expose escape*() methods taking Writer argument. Fraction.toProperString() returns -1/1 for -1. DurationFormatUtils.formatDurationWords "11 <unit>s" gets converted to "11 <unit>". Performance modifications on StringUtils.replace. StringEscapeUtils.unescapeHtml skips first entity after standalone ampersand. DurationFormatUtils.formatPeriod() returns the wrong result. Request for MutableBoolean implementation. New method for EqualsBuilder. New ExceptionUtils method setCause(). Add Mutable<Type> to<Type>() methods. Provides a Class.getPublicMethod which returns public invocable Method. Using ReflectionToStringBuilder and excluding secure fields. add generic add method to DateUtils. Tokenizer Enhancements: reset input string, static CSV/TSV factories. Trivial cleanup of Javadoc in various files. CompositeFormat. Performance boost for RandomStringUtils. Enhanced Class.forName version. Add StringUtils.containsIgnoreCase(...). Support char array converters on ArrayUtils. DurationFormatUtils.formatDurationISO() Javadoc is missing T in duration string between date and time part. Minor build and checkstyle changes. Javadoc errors on StringUtils.splitPreserveAllTokens(String, char). EscapeUtil.escapeHtml() should clarify that it does not escape ' chars to &apos;. Add methods and tests to StrBuilder. replace() length calculation improvement. New interpolation features. Implementation of escape/unescapeHtml methods with Writer. CompareToBuilder excludeFields for reflection method. Add WordUtils.getInitials(String). Error in an example in the Javadoc of the StringUtils.splitPreserveAllTokens() method. ToStringBuilder/HashCodeBuilder Javadoc code examples. Cannot build tests from latest SVN. minor Javadoc improvements for StringUtils.stripXxx() methods. Javadoc for StringUtils.removeEnd is incorrect. Minor tweak to fix of bug # 26616. make optional parameters in FastDateFormat really optional. Nestable.indexOfThrowable(Class) uses Class.equals() to match. buffer under/overrun on Strings.strip, stripStart & stripEnd. ToStringStyle.setArrayEnd(String) doesn't replace null with empty string. New class proposal: CharacterEncoding. SystemUtils fails init on HP-UX. Javadoc - 'four basic XML entities' should be 5 (apos is missing). o.a.c.lang.enum.ValuedEnum: 'enum' is a keyword in JDK 1.5.0. StringEscapeUtils.unescapeHtml() doesn't handle an empty entity. EqualsBuilder.append(Object[], Object[]) incorrectly checks that rhs[i] is instance of lhs[i]'s class. Method enums.Enum.equals(Object o) doesn't work correctly. ExceptionUtils.addCauseMethodName(String) does not check for duplicates. Make StopWatch validate state transitions. enum package is not compatible with 1.5 jdk. WordUtils capitalizeFully() throws a null pointer exception. ValuedEnum. parseDate class from HttpClient's DateParser class. ArrayUtils.isEquals() throws ClassCastException when array1 and array2 are different dimension. ClassCastException in Enum.equals(Object). FastDateFormat year bug. unbalanced ReflectionToStringBuilder. FastDateFormat.getDateInstance(int, Locale) always uses the pattern from the first invocation. ReflectionToStringBuilder.toString(null) throws exception by design. Make ClassUtils methods null-safe and not throw an IAE. StringUtils.split ignores empty items. EqualsBuilder.append(Object[], Object[]) throws NPE. ArrayUtils.addAll doesn't always return new array. Enum.equals does not handle different class loaders. Add SystemUtils.AWT_TOOLKIT and others. Throwable cause for NotImplementedException. ClassUtils.primitivesToWrappers method. public static boolean DateUtils.equals(Date dt1, Date dt2) ?. Documentation error in StringUtils.replace. DateUtils constants should be long. DateUtils.truncate() is off by one hour when using a date in DST switch 'zone'. StringEscapeUtils.unescapeHtml() doesn't handle hex entities. new StringUtils.replaceChars behaves differently from old CharSetUtils.translate. last substring returned by StringUtils.split( String, String, int ) is too long. Can't subclass EqualsBuilder because isEquals is private. new StringUtils.split methods that split on the whole separator string. New method for converting a primitive Class to its corresponding wrapper Class. Add convenience format(long) methods to FastDateFormat. Enum's outer class may not be loaded for EnumUtils. WordUtils.capitalizeFully(String str) should take a delimiter. Make Javadoc cross-linking configurable. Minor Javadoc fixes for StringUtils.contains(String, String). Error in Javadoc for StringUtils.chomp(String, String). StringUtils.defaultString: Documentation error. Add hashCode-support to class ObjectUtils. add another "known method" to ExceptionUtils. Enhancement of ExceptionUtils.CAUSE_METHOD_NAMES. DateUtils.truncate oddity at the far end of the Date spectrum. add getLength() method to ArrayUtils. Validate.java: fixes comment skew, removes unused loop counter. StringUtils.isAsciiPrintable(). ExceptionUtils: new getCause() methodname (for tomcat-exception). fixes 75 typos. mutable numbers. Javadoc fixes for ClassUtils. Add StringUtils.nIndexOf?. Javadoc fixes for CharSetUtils. Remove redundant check for null separator in StringUtils#join. Class and Package Comparators for ClassUtils. add remove methods to ArrayUtils. WordUtils capitalize improvement. add isEmpty method to ArrayUtils. lang.math.Fraction class deficiencies. Add methods to ArrayUtils: add at end and insert-like ops. Add SystemUtils methods for directory properties. Add method that validates Collection elements are a certain type. elapsed time formatting utility method. Infinite loop in ToStringBuilder.reflectionToString for inner classes. NumberUtils.createBigDecimal("") NPE in Sun 1.3.1_08. Rationalize StringUtils slice functions. SystemUtils.IS_OS_OS2 Javadoc is wrong. A small, but important Javadoc fix for Fraction proper whole and numerator. Adding tolerance to double[] search methods in ArrayUtils. lang.builder classes Javadoc edits (mostly typo fixes). StringUtils Javadoc and test enhancements. SystemUtils.IS_OS_*, IS_JAVA_* are always false. Improve util.Validate tests. maven-beta10 checkstyle problem. StringUtils.chopNewLine - StringIndexOutOfBoundsException. ToStringBuilder doesn't work well in subclasses. static option for reversing the stacktrace. NullPointerException in CompareToBuilder. RandomStringUtils.randomAlpha methods omit 'z'. test.time fails in Japanese (non-us) locale. NumberUtils.isNumber allows illegal trailing characters. Improve Javadoc and overflow behavior of Fraction. RandomStringUtils infinite loop with length > 1. test.lang fails if compiled with non iso-8859-1 locales. SystemUtils does not play nice in an Applet. time unit tests fail on Sundays. java.lang.ExceptionInInitializerError thrown by JVMRandom constructor. StringUtils.chomp does not match Perl. patch and test case fixing problem with RandomStringUtils.random(). General case: infinite loop: ToStringBuilder.reflectionToString. Should ToStringBuilder.reflectionToString handle arrays?. EnumUtils nit: The import java.io.Serializable is never used. Example in Javadoc for ToStringBuilder wrong for append. Added class hierarchy support to HashCodeBuilder.reflectionHashCode(). ExceptionUtils new methods. Infinite loop in StringUtils.replace(text, repl, with) + FIX. StackOverflow due to ToStringBuilder. No Javadoc for NestableDelegate. Specify initial size for Enum's HashMap. Enum does not support inner sub-classes. Removed compile warning in ObjectUtils. SystemUtils.IS_JAVA_1_5 Javadoc is wrong. NumberRange inaccurate for Long, etc. Hierarchy support in ToStringBuilder.reflectionToString(). StringUtils.countMatches loops forever if substring empty. Javadoc fixes (remove @links to non-public identifiers). Add Javadoc examples and tests for StringUtils. Make NumberUtils null handling consistent. Unused field 'startFinal' in DateIterator. reduce object creation in ToStringBuilder. Improved tests, Javadoc for CharSetUtils, StringEscapeUtils. NumberUtils min/max, BooleanUtils.xor, and ArrayUtils toPrimitive and toObject. Javadoc, tests improvements for CharSet, CharSetUtils. StringUtil enhancement. Javadoc nit. Additional Lang Method Suggestions. Make NestableDelegate methods public instead of package private. Missing @since tags. Refactored reflection feature of ToStringBuilder into new ReflectionToStringBuilder. Typo in documentation. Patch for Javadoc. Add join(..., char c) to StringUtils (and some performance fixes). Even contains tests!. Resurrect the WordWrapUtils from commons-sandbox/utils. EnumTest fails on Linux Sun JDK 1.3.0. What to do with FastDateFormat unused private constructors. Added class hierarchy support to CompareToBuilder.reflectionCompare(). Removed compile warning in FastDateFormat. typo in the Javadoc example code. MethodUtils: Removed unused code/unused local vars. Hierarchy support in EqualsBuilder.reflectionEquals(). Javadoc Errata. ArrayUtils.contains(). More flexibility for getRootCause in ExceptionUtils. NumberRange.getMaximum returns minimum. Enum constructor validations. NestableException/Delegate is not serializable. split using null and max less than actual token count adds "null". ExceptionUtils cannot handle J2EE-Exception in a default way.