Итак, хочется, что бы выполнялись 3-й и 4й ассерты, но ничего не могу придумать.
com.ibm.icu уже весь облазил, Collator работает не так, как кажется - если высталять аттрибут Strengh=Primary, то сравнение происходит без учета регистра (и это не отключается, там как бы охватывающее условие), а мне нужно с учетом регистра.
import java.lang.Math;
import java.lang.String;
import com.ibm.icu.text.Normalizer2;
public class HelloWorld {
public static boolean equalsIgnoreCaseMy(CharSequence s, CharSequence t) {
Normalizer2 normalizer = Normalizer2.getNFKCCasefoldInstance();
return normalizer.normalize(s).equals(normalizer.normalize(t));
}
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "hello";
assert s1.equalsIgnoreCase(s2);
String brook = "\uFB02u\u0308\u00DFchen"; // "flüßchen"
String BROOK = "FL\u00DCSSCHEN"; // "FLÜSSCHEN"
assert equalsIgnoreCaseMy(brook, BROOK);
String e1 = "encyclopaedia";
String E1 = "Encyclopaedia";
String e2 = "encyclop\u00E6dia"; // "encyclopædia"
assert equalsWHAT(e1, e2); // №3
assert false == equalsWHAT(E1, e2); // №4
}
}
Дело в том, что такой код на C# работает
String e1 = "encyclopaedia";
String E1 = "Encyclopaedia";
String e2 = "encyclop\u00E6dia"; // "encyclopædia"
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Debug.Assert( string.Equals(e1, e2, StringComparison.CurrentCulture) );
Debug.Assert( !string.Equals(E1, e2, StringComparison.CurrentCulture) );
Но меня интересует только Ява и указанное поведение. C# приведен как пример того, что такое поведение мне потребовалось не на пустом месте.
Спасибо