代码之家  ›  专栏  ›  技术社区  ›  AverageHelper

更智能的自动资本化

  •  2
  • AverageHelper  · 技术社区  · 11 年前

    我一直在四处寻找,我想知道是否有一种简单的方法可以将 UITextField ,同时保留某些单词(例如 属于 , 这个 , 等)小写,除非它们是短语的第一个单词。

    这是一个

    我试图传达的效果示例。

    我发现的一种方法是在文本字段值中搜索特定单词,并在用户键入新单词或字符时将其替换为小写版本,可能是在听空格键。

    我不确定上述方法是否是最佳实践,也不确定我的搜索范围是否不够广泛,无法找到已经存在的解决方案。

    我最初的想法是:

    When value of textfield is changed
        Get current value textfield
        For each word in value:
            If the word matches ("For", "Of", "The", etc.) and the word is not the first word in the value:
            Change the word to lowercase, and replace word
        Go to next word
    

    我的实际问题主要是表现。这种方法在我的申请中是否会过于费力?如果是,有什么更好的解决方案吗?

    谢谢大家的帮助!


    更新:

    感谢holex、cluemein和其他已经评论并回答的人。当我有机会时,我会尝试你的解决方案。

    1 回复  |  直到 11 年前
        1
  •  1
  •   cluemein    11 年前

    将单词转换为小写的更好方法是将 不是 您指定的单词。设置if语句,将第一个单词的开头字母大写,如果后面的单词不是您指定的单词,则将其大写。然后,如果要确保指定的单词在第一个单词之后没有大写,请使用else语句。“伪代码”示例:

    Capitalize letter of first word;
    Move on to next word;
    
    While not end of textfield (or while typing):
         if word is not ("the"|"and"|"of"|"or"|...):
                capitalize first letter;
         else:
                set first letter to lowercase;
         move to next word at space;
    

    平均而言,这大约是在运行时返回文本查找指定单词的速度的两倍。这不是你要使用的代码,而是你要实现的算法。此外,考虑holex所说的空间。我把如何实现这个算法交给你。为了澄清,该算法适用于自动资本化和自动设置为小写。