当前位置:  开发笔记 > 编程语言 > 正文

重新实现ToUpper()

如何解决《重新实现ToUpper()》经验,为你挑选了3个好方法。

如果ToUpper()不存在,你会怎么写?i18n和L10n的奖励积分

由此产生的好奇心:http://thedailywtf.com/Articles/The-Long-Way-toUpper.aspx



1> Aaron Digull..:

    我下载了Unicode表

    我将表导入数据库

    我写了一个方法upper().

这是一个示例实现;)

public static String upper(String s) {
    if (s == null) {
        return null;
    }

    final int N = s.length(); // Mind the optimization!
    PreparedStatement stmtName = null;
    PreparedStatement stmtSmall = null;
    ResultSet rsName = null;
    ResultSet rsSmall = null;
    StringBuilder buffer = new StringBuilder (N); // Much faster than StringBuffer!
    try {
        conn = DBFactory.getConnection();
        stmtName = conn.prepareStatement("select name from unicode.chart where codepoint = ?");
        // TODO Optimization: Maybe move this in the if() so we don't create this
        // unless there are uppercase characters in the string.
        stmtSmall = conn.prepareStatement("select codepoint from unicode.chart where name = ?");
        for (int i=0; i

;)

注意:您可以在unicode.org上找到的unicode图表包含字符/代码点的名称.对于大写的字符,这个字符串将包含"SMALL"(注意空格或者它可能匹配"SMALLER"等).现在,您可以搜索"SMALL"替换为"CAPITAL"的类似名称.如果你找到它,你就找到了自然版本.



2> leppie..:

我不认为SO可以在一个帖子中处理unicode表的大小:)

不幸的是,它不像char.ToUpper()每个角色那么容易.

例:

(string-upcase "Straße")    ? "STRASSE"
(string-downcase "Straße")  ? "straße"
(string-upcase "????")      ? "????"
(string-downcase "????")    ? "????"
(string-downcase "?????")   ? "?????"
(string-downcase "???? ?")  ? "???? ?"
(string-upcase "????")      ? "????"
(string-upcase "????")      ? "????"


大写ß刚刚在4月份通过更新一些ISO标准添加到Unicode标准中,因此字体支持非常少见.:)此外,Duden还没有接受它为标准语言,所以你的*是*正确的.:)只是想指出另一种未来的可能性.

3> Douglas Leed..:

没有静态表就足够了,因为在知道正确的变换之前需要先了解语言.

例如土耳其语i需要去?(U + 0130)而其他语言需要去I(U + 0049).和iU + 0069是同一个角色.


UFF.我猜这就是为什么一个合适的i18n库占用> 10MB的原因.疯狂的人.为什么我们的祖先不能满足于一个简单的单一写作系统呢?:P
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有