【问题标题】:How to make first letter uppercase in a UILabel?如何在 UILabel 中将第一个字母大写?
【发布时间】:2023-03-15 01:50:01
【问题描述】:

我正在开发一个 iPhone 应用程序。在标签中,我想显示用户名称的第一个字母大写。我该怎么做?

【问题讨论】:

  • 你想在哪里展示它?在文本框或标签中还是...?
  • 您是否检查过 NSString 文档中的某些听起来像是返回大写字符串的方法?
  • 如果您对姓氏这样做,请记住姓氏的大小写规则会有所不同。某些姓氏,例如 McDonald 或 O'Conor,除了第一个名字外,还有大写字母。
  • 这是给用户名和标签的。

标签: ios objective-c swift cocoa-touch nsstring


【解决方案1】:

如果只有一个单词String,则使用方法

-capitalized

let capitalizedString = myStr.capitalized // capitalizes every word

否则,对于多字串,您必须提取第一个字符并仅将该字符设为大写。

【讨论】:

  • 如下所述:此方法将NSString的每个单词都大写
  • "capitalizedString" 返回:一个字符串,接收者中每个单词的第一个字符更改为相应的大写值,其余所有字符设置为相应的小写值。
  • 如果你有一个名为 yourCoolTable 的数据库表的字符串名称,并且你在名称 YourCoolTable 之后,这将不起作用,因为它返回 Yourcooltable,它只会破坏你的价值在相反的方向......修复第一个角色,同时破坏你的其余角色。
  • 不是答案,因为此解决方案将字符串的其余字符转换为小写。
【解决方案2】:

(2014-07-24:当前接受的答案不正确)问题非常具体:将第一个字母大写,其余小写。使用大写字符串会产生不同的结果:“大写字符串”而不是“大写字符串”。还有另一个取决于语言环境的变体,它是大写的StringWithLocale,但它对西班牙语不正确,现在它使用与英语相同的规则,所以这就是我对西班牙语的做法:

NSString *abc = @"this is test";

abc = [NSString stringWithFormat:@"%@%@",[[abc substringToIndex:1] uppercaseString],[abc substringFromIndex:1] ];       
NSLog(@"abc = %@",abc);

【讨论】:

  • 这不正是铍的答案吗?
  • 不,Beryllium 的答案将 NSString 的每个单词都大写。
  • 这会在空字符串上抛出异常
【解决方案3】:

如果有人对 2016 年仍然感兴趣,这里有一个 Swift 3 扩展:

extension String {
    func capitalizedFirst() -> String {
        let first = self[self.startIndex ..< self.index(startIndex, offsetBy: 1)]
        let rest = self[self.index(startIndex, offsetBy: 1) ..< self.endIndex]
        return first.uppercased() + rest.lowercased()
    }

    func capitalizedFirst(with: Locale?) -> String {
        let first = self[self.startIndex ..< self.index(startIndex, offsetBy: 1)]
        let rest = self[self.index(startIndex, offsetBy: 1) ..< self.endIndex]
        return first.uppercased(with: with) + rest.lowercased(with: with)
    }
}

然后你就可以像通常的大写()或大写()一样使用它:

myString.capitalizedFirst()myString.capitalizedFirst(with: Locale.current)

【讨论】:

    【解决方案4】:

    简单

    - (NSString *)capitalizeFirstLetterOnlyOfString:(NSString *)string{
         NSMutableString *result = [string lowercaseString].mutableCopy;
         [result replaceCharactersInRange:NSMakeRange(0, 1) withString:[[result substringToIndex:1] capitalizedString]];
    
         return result;
    }
    

    【讨论】:

      【解决方案5】:

      这是为您的NSString+Util 类别...

      - (NSString *) capitalizedFirstLetter {
          NSString *retVal;
          if (self.length < 2) {
              retVal = self.capitalizedString;
          } else {
              retVal = string(@"%@%@",[[self substringToIndex:1] uppercaseString],[self substringFromIndex:1]);
          }
          return retVal;
      }
      

      当然,您可以使用 NSString stringWithFormat 做到这一点。我使用这种怪异:

      #define string(...) \
      [NSString stringWithFormat:__VA_ARGS__]
      

      【讨论】:

      • 不需要检查 !self 因为在这种情况下不会调用您的类别方法。为简单起见,前三个条件可以替换为 if (self.length
      • 你是对的,但我认为如果字符串被释放,它可能是零。关于简化,您的观点仍然存在。谢谢
      • 即使字符串被解除分配(这只会发生在内存管理错误的多线程上下文中),self 仍将是一个悬空指针而不是 nil。
      • 无需初始化retVal = self
      【解决方案6】:

      作为已接受答案的扩展

      capitalizedString用于制作大写字母。

      NSString *capitalizedString = [myStr capitalizedString]; // capitalizes every word
      

      但是,如果您在一个字符串中有很多单词并且只想将第一个字符设为大写,请使用以下解决方案

      NSString *firstCapitalChar = [[string substringToIndex:1] capitalizedString];
      NSString *capString = [string stringByReplacingCharactersInRange:NSMakeRange(0,1) withString: capString];
      
      
      // extract first character and make only that character upper case.
      

      【讨论】:

        【解决方案7】:

        这是一个快速的扩展

        extension NSString {
            func capitalizeFirstLetter() -> NSString {
                return self.length > 1 ?
                  self.substringToIndex(1).capitalizedString + self.substringFromIndex(1) :
                  self.capitalizedString
            }
        }
        

        【讨论】:

          【解决方案8】:

          这对我来说是这样的:

          NSString *serverString = jsonObject[@"info"];
          
          NSMutableString *textToDisplay = [NSMutableString stringWithFormat:@"%@", serverString];
          
          [textToDisplay replaceCharactersInRange:NSMakeRange(0, 1) withString:[textToDisplay substringToIndex:1].capitalizedString];
          
          cell.infoLabel.text = textToDisplay;
          

          希望对你有帮助。

          【讨论】:

            【解决方案9】:

            斯威夫特:

            let userName = "hard CODE"
            yourLabel.text = userName.localizedUppercaseString
            

            我建议使用大写的本地化版本,因为名称对区域设置敏感。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-23
              • 2018-07-08
              • 2013-09-01
              • 1970-01-01
              相关资源
              最近更新 更多