Feature Comparison Chart

This table lists down the differences between the functions provided by ICU, ICU4J and JDK.

In the case where ICU and JDK supports the same functionality, ICU has a more updated implementation that is Unicode conformant.

Functions

ICU4C 4.0 or later

ICU4J 4.0 or later

JDK 6

unicode/uniset.h

com.ibm.icu.text.UnicodeSet

not available

Strings

UTF16 manipulation

Code point order comparison

Code unit order comparison

Unicode Character Iterator

unicode/ustring.h

unicode/unistr.h

unicode/utf.h

unicode/utf16.h

unicode/chariter.h

unicode/uiter.h

com.ibm.icu.lang.Character

com.ibm.icu.text.UTF16

com.ibm.icu.text.UCharacterIterator

java.lang.String

java.lang.Character

(Since Java 5)

not available

java.lang.String

java.text.CharacterIterator

unicode/ucnv.h

unicode/ucnv.h

unicode/csdetect.h

com.ibm.icu.text.SCSU

not available

com.ibm.icu.text.CharsetDetector

icu4j-charsets-version.jar

Same data as icu4c.

not available

not available

not available

Locale

Locale data

Resource Management

String and string array storage and retrieval

Binary storage and retrieval

Object and object array storage and retrieval

unicode/ures.h

unicode/ures.h

not available

Locale data

Uses CLDR 1.5.0.1.

com.ibm.icu.util.UResourceBundle

com.ibm.icu.util.UResourceBundle

use Java

Locale data

Supports the same locale data as in ICU4C.

java.util.ResourceBundle

none that are locale sensitive

java.util.ResourceBundle

Supported locales

Uses some CLDR data.

Calendar

Time Zone

Time Zone rule based retrieval / comparison

unicode/timezone.h

unicode/basictz.h

unicode/rbtz.h

com.ibm.icu.util.TimeZone

com.ibm.icu.util.BasicTimeZone

com.ibm.icu.util.RuleBasedTimeZone

java.util.TimeZone

not available

Format & Parse

Extensible format base class

Date / time

Date / time, relative

Date / time duration

Decimals numbers

Message

Extensible number base class

Rule-based number

Choice

unicode/format.h

unicode/datefmt.h

unicode/datefmt.h

(use relative style)

not available

unicode/decimfmt.h

unicode/msgfmt.h

unicode/numfmt.h

unicode/rbnf.h

unicode/choicfmt.h

use Java

com.ibm.icu.text.DateFormat

com.ibm.icu.text.DateFormat

(use relative style)

com.ibm.icu.text.DurationFormat

com.ibm.icu.text.DecimalFormat

com.ibm.icu.text.MessageFormat

com.ibm.icu.text.NumberFormat

com.ibm.icu.text.RuleBasedNumberFormat

use Java

java.text.Format

java.text.DateFormat

not available

not available

java.text.DecimalFormat

java.text.MessageFormat

java.text.NumberFormat

not available

java.text.ChoiceFormat

Transformations

Case Mappings

BiDi Algorithm

Normalization

Decomposition

Composition

Canonical string comparisons

String concatenation

Note: result string is normalized.

FC_NFKC closure set retrieval

Quick check

FCD

unicode/uchar.h

unicode/ustring.h

unicode/unistr.h

unicode/ubidi.h

unicode/unorm.h

unicode/normlzr.h

com.ibm.icu.lang.UCharacter

com.ibm.icu.text.Bidi

com.ibm.icu.text.Normalizer

java.lang.Character

java.text.Bidi

java.text.Normalizer

(Since Java 6)

not available

not available

not available

not available

layout/loengine.h

not available

internal

unicode/regex.h

use Java

java.util.regex

Boundary Analysis

Dictionary-based break iterators

Line boundaries

Sentence boundaries

Word boundries

Rule-based break iterators

unicode/brkiter.h

unicode/brkiter.h

unicode/brkiter.h

unicode/brkiter.h

unicode/rbbi.h

com.ibm.icu.text.BreakIterator

com.ibm.icu.text.BreakIterator

com.ibm.icu.text.BreakIterator

com.ibm.icu.text.BreakIterator

com.ibm.icu.text.RuleBasedBreakIterator

not available

java.text.BreakIterator

java.text.BreakIterator

java.text.BreakIterator

not available