JDK-4519837 : String.toLowerCase incorrectly converts the letter \u03A3
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.lang
  • Affected Version: 1.4.0
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • OS: generic
  • CPU: generic
  • Submitted: 2001-10-26
  • Updated: 2001-10-26
  • Resolved: 2001-10-26
Related Reports
Duplicate :  
Description

Name: skR10005			Date: 10/26/2001


The JCK tests
api/java_lang/String/multimapping.html#CaseMapping[String2301]
api/java_lang/String/multimapping.html#CaseMapping[String2304]
fail on jdk1.4.0beta-b84.

The additional file of Unicode specification SpecialCasing-2.txt contains
the special letters which do not follow the main table of letter
conversion. One of this letter is \u03A3. The entry for this letter is
# Special case for final form of sigma

03A3; 03C2; 03A3; 03A3; FINAL; # GREEK CAPITAL LETTER SIGMA

It contains the condition FINAL. The head of this file explains:
#  A condition list overrides the normal behavior if any of the listed conditions is true.
#   FINAL:  The letter is not followed by a letter of category L* (e.g. Ll, Lt, Lu, Lm, or Lo).

But it seems, the JDK implementation does not take into account this condition.
To reproduce this failure the simple test can be used:
=======================================================
public class A {
    public static void main(String[] argv) {
        String checkedString = "\u03A30";
        String ExpectedLowerString = "\u03C20";
        if(!checkedString.toLowerCase().equals(ExpectedLowerString))
            System.out.println("Incorrect lowercase");
        else 
            System.out.println("ok");
    }
}
=======================================================
$java -version
java version "1.4.0-beta3"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-beta3-b84)
Java HotSpot(TM) Client VM (build 1.4.0-beta3-b84, mixed mode)

$javac -d . A.java

$java -cp . A
Incorrect lowercase


======================================================================