-
Bug
-
Resolution: Fixed
-
P4
-
1.2.0
-
beta
-
sparc
-
solaris_2.5
-
Verified
Name: saC57035 Date: 05/26/98
Let's consider for example the isJavaLetter method (the problem in the
isJavaLetterOrDigit method is exactly the same).
The specification for isJavaLetter says:
"A character is considered to be a Java letter if and only if it
is a letter, the ASCII dollar sign character <code>'$'</code>, or
the underscore character <code>'_'</code>."
However, the implementation considers other currency symbols and
connecting punctuation characters as Java letters either. In fact,
as seen from the source code, it behaves exactly as the
isJavaIdentifierStart method, whilst their specs are pretty different.
Here is the example demonstrating the bug:
------------------------------------------
public class CharTest {
public static void main(String args[]) {
char falseChars[] = {
'\u00A2', '\u00A3', '\u00A4', '\u00A5', '\u09F2',
'\u09F3', '\u0E3F', '\u20A0', '\u20A1', '\u20A2', '\u20A3',
'\u20A4', '\u20A5', '\u20A6', '\u20A7', '\u20A8', '\u20A9',
'\u20AA', '\u20AB', '\uFE69', '\uFF04', '\uFFE0',
'\uFFE1', '\uFFE5', '\uFFE6',
'\u203F', '\u2040', '\uFE33', '\uFE34', '\uFE4D',
'\uFE4E', '\uFE4F', '\uFF3F'
};
int failures=0;
for (int i=0;i<falseChars.length;i++) {
if ( Character.isJavaLetter(falseChars[i]) ) {
System.out.println ("isJavaLetter(\\u"+
Integer.toHexString(falseChars[i]).toUpperCase()+"): false expected.");
++failures;
}
}
if (failures == 0)
System.out.println("Test passed");
}
}
---- Output -------------------
isJavaLetter(\uA2): false expected.
isJavaLetter(\uA3): false expected.
isJavaLetter(\uA4): false expected.
isJavaLetter(\uA5): false expected.
isJavaLetter(\u9F2): false expected.
isJavaLetter(\u9F3): false expected.
isJavaLetter(\uE3F): false expected.
isJavaLetter(\u20A0): false expected.
isJavaLetter(\u20A1): false expected.
isJavaLetter(\u20A2): false expected.
isJavaLetter(\u20A3): false expected.
isJavaLetter(\u20A4): false expected.
isJavaLetter(\u20A5): false expected.
isJavaLetter(\u20A6): false expected.
isJavaLetter(\u20A7): false expected.
isJavaLetter(\u20A8): false expected.
isJavaLetter(\u20A9): false expected.
isJavaLetter(\u20AA): false expected.
isJavaLetter(\u20AB): false expected.
isJavaLetter(\uFE69): false expected.
isJavaLetter(\uFF04): false expected.
isJavaLetter(\uFFE0): false expected.
isJavaLetter(\uFFE1): false expected.
isJavaLetter(\uFFE5): false expected.
isJavaLetter(\uFFE6): false expected.
isJavaLetter(\u203F): false expected.
isJavaLetter(\u2040): false expected.
isJavaLetter(\uFE33): false expected.
isJavaLetter(\uFE34): false expected.
isJavaLetter(\uFE4D): false expected.
isJavaLetter(\uFE4E): false expected.
isJavaLetter(\uFE4F): false expected.
isJavaLetter(\uFF3F): false expected.
---------------------------------------------