如何将字符串的第一个字母大写

2023-11-23

我有一个像这样的字符串

var sentence string = "the biggest ocean is the Pacific ocean"

我希望能够将第一个字母大写t在输入字符串中,使该字符串变为

"The biggest ocean is the Pacific ocean"

在 Go 中如何做到这一点?

我尝试过使用strings.Title and strings.ToTitle然而他们没有做我想做的事。


假设您的输入字符串是有效的 UTF-8,这个线程(Golang - ToUpper() 在单个字节上?)足够接近,尽管不是完美的重复。我们可以在此基础上使用以下方法得出可接受的解决方案unicode.ToUpper在第一个rune字符串的。

    r := []rune(s)
    r[0] = unicode.ToUpper(r[0])
    s := string(r)

或者用一句“聪明的”俏皮话:

    s := string(append([]rune{unicode.ToUpper(r[0])}, r[1:]...))

与字符串不同,符文切片不是不可变的,因此您可以将第一个符文替换为ToUpper,它将处理具有大写字母(例如俄语)的非 ASCII 和/或多字节代码点,并忽略那些不具有大写字母的代码点(例如亚洲脚本)

NOTE:UPPER case 和 TITLE case 之间有区别,简单解释一下here。简而言之,像 DŽ 这样的二合字母字符将具有不同的标题大小写(Dž,仅第一个字素大写)和大写(DŽ,两个字素都大写)。如果您确实需要标题大小写,请使用unicode.ToTitle.

NOTE 2:转换为/自string to []rune涉及复制,因为您从不可变字符串中获取可变切片。如果您希望在性能敏感的代码中使用您的应用程序,请务必对其进行分析。

操场:https://go.dev/play/p/HpCBM7cRflZ


如果您有一个相当大的输入字符串,其中完整的符文切片转换变得太昂贵,您可以使用上限来解决这个问题strings.SplitN在某些分隔符上,本质上是提取文本的第一个单词并在转换中仅使用该单词:

sep := " "
ss := strings.SplitN(s, sep, 2)

r := []rune(ss[0])
r[0] = unicode.ToUpper(r[0])

s = string(r) + sep + ss[1])

使用 ~30K 输入字符串进行基准测试显示出显着差异:

go test -v -bench=. -benchmem
goos: darwin
goarch: arm64
pkg: example.com
BenchmarkRuneConv-10            6376        183691 ns/op      258049 B/op          3 allocs/op
BenchmarkSplitN-10           1709989           706.1 ns/op      4152 B/op          3 allocs/op
PASS
ok      example.com 3.477s
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将字符串的第一个字母大写 的相关文章

  • 需要Python字长函数示例

    我的家庭作业有点困难 我本来应该编写一个函数 limitWords 将输入限制为 20 个单词 如果输入超过 20 个单词 则将输入截断为仅 20 个单词 我使用 len text split 作为计算单词的方法 因此 20 个或更少的部分
  • 为什么使用 string::iterator 而不是索引? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么使用迭代器而不是数组索引 https stackoverflow com questions 131241 why use iterators instead of array indices
  • 如何从字符串中分离字符和数字部分

    例如 我想分开 OS234 to OS and 234 AA4230 to AA and 4230 我使用了以下简单的解决方案 但我确信应该有一个更有效和更强大的解决方案 private void demo string cell ABCD
  • golang中如何将相对路径解析为绝对路径?

    节点中是否有类似 path resolve 的API 或者有什么东西可以做同样的事情 例如 nodejs代码 path resolve sample sh 应该得到 home currentuser sample sh 解决 表示用户主目录
  • 检查字符串是否编码为 UTF-8

    function seems utf8 str length strlen str for i 0 i lt length i c ord str i if c lt 0x80 n 0 0bbbbbbb elseif c 0xE0 0xC0
  • 如何缩短 PHP if 语句?

    我有一个 if 语句 我需要将单个字符串与许多不同的选项进行比较 我在下面发布的代码非常清楚地表明了我的意思 我知道有两种方法可以做到这一点 但另一种甚至更长 那么 是否有任何函数可以以更短的方式实现类似的功能 我的要求可能看起来很愚蠢 但
  • JavaScript:搜索字符串时的 indexOf 与 Match? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 使用之间是否存在明显的性能差异 str indexOf src and str match src 我个人比较喜欢match 和正则表达式 但同
  • 正则表达式 匹配捕获组内的文本

    示例文本 ruby object DynamicAttribute attributes resource id 1 resource type Applicant string value Michael int value id 359
  • 属性文件中的字符串主机名:Java

    这听起来可能是一个非常简单的问题 但我无法找到解决方法 我有一个 config properties 文件 其中包含两个键值 IP 地址和端口号 我读取此配置文件以提取字符串格式的键值 但是 当我尝试使用这些值时 我无法连接到从配置文件中检
  • 根据 R 中的字符串模式选择行

    假设我有以下数据 df lt data frame name c TO for Turnover for people HC people Hello world beenie man apple pears TO is number c
  • Python,将字典存储在数据库中

    在数据库中存储和检索 python 字典的最佳方法是什么 如果您对使用传统 SQL 数据库 例如 MySQL 不是特别感兴趣 您可以研究非结构化文档数据库 其中文档自然映射到 python 字典 例如MongoDB http www mon
  • 共享 GOPATH 的良好做法是什么?

    我刚刚开始学习 Go 并阅读现有代码以了解 其他人是如何做的 在这样做时 go 工作空间 的使用 特别是当它与项目的依赖项相关时 似乎无处不在 在处理各种 Go 项目时 使用单个或多个 Go 工作区 即 GOPATH 的定义 的常见最佳实践
  • Java:从 StringBuilder 中删除字符串[重复]

    这个问题在这里已经有答案了 我想从 StringBuilder 中删除 String Example String aaa sample String bbb sample2 String ccc sample3 在另一部分 StringB
  • Python 中的可变字符串

    你知道有一个提供可变字符串的 Python 库吗 谷歌返回的结果出奇的少 我发现的唯一可用的库是http code google com p gapbuffer http code google com p gapbuffer 它是用 C
  • 重新设计循环依赖缺陷

    我有一堆小服务 它们共享一些常见的包 例如Logger Configuration and Net 我在单独的项目中编写了每个包 问题是我的Logger需求包Configuration用于设置 和我的Configuration not仅由L
  • 将 char* 转换为字符串 C++

    我知道字符串的起始地址 例如 char buf 和最大长度int l 字符串的 即字符总数小于或等于l 获取值的最简单方法是什么string来自指定的内存段 换句话说 如何实现string retrieveString char buf i
  • 如何打印整个字符串池?

    我想打印包含文字的整个字符串池String使用添加的对象intern 就在垃圾收集之前 JDK有没有隐式的方法来进行这样的操作 我们如何检查字符串池 EDIT The comment suggests that there may be a
  • 仅导出嵌入结构实现的方法子集

    是否可以仅导出嵌入结构实现的方法的子集 这是一种与减少代码复制和粘贴非常不同的方法吗 还有更惯用的方法吗 type A struct func a A Hello fmt Println Hello func a A World fmt P
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co

随机推荐

  • Instagram API 匹配代码未找到或已被使用

    我在使用 Instagram API 的实时服务器上看到此错误 Error true message Matching code was not found or was already used 我在这里阅读了一些清除缓存的建议 但这并不
  • Laravel:POST 方法返回 MethodNotAllowedHttpException

    我有一个POST路线在我的api php文件 它是这样的 Route group namespace gt api function Route post parent signup ParentController signUp 我正在尝
  • ejb 3.1 中的计时器服务 - 调度调用超时问题

    我使用 Singleton Schedule 和 Timeout 注释创建了简单的示例 以尝试它们是否能解决我的问题 场景是这样的 EJB 每 5 秒调用一次 检查 函数 如果满足某些条件 它将创建单个操作计时器 该计时器将以异步方式调用一
  • JavaFX:将控制台输出重定向到在 SceneBuilder 中创建的 TextArea

    EDIT 4 我创建了一个简单的示例 应该可以让您了解现在发生的情况 现在发生的情况是 每当我单击按钮将 HELLO WORLD 打印到 TextArea 时 程序就会挂起并使用 100 的 CPU Eclipse 控制台面板中也没有输出
  • 检查 COM 接口是否还存在?

    在 COM 中 如何验证指向 COM 对象的指针在另一端仍然具有有效的对象 我遇到一个问题 以下代码尝试检查是否m pServer指针仍然存在 但是当暴露该接口的应用程序被终止时 这段代码会使应用程序崩溃 有人可以建议如何在使用前检查指针吗
  • 在 Activity 的 onDestroy 方法中保存数据

    我正在编写一个任务列表并拥有 Project 对象 其中包含所有任务 和元数据 我使用操作日志 因此当任务发生变化时 我不会立即将其保存到数据库中 而是将其保留在内存中 以便在活动完成时转储到数据库中 Activity 的 onDestro
  • Django 异步处理

    我有一堆 Django 请求 它们执行一些数学计算 用 C 编写并通过 Cython 模块执行 这可能需要不确定的时间 大约 1 秒 来执行 此外 请求不需要访问数据库 并且彼此独立且独立于 Django 现在一切都是同步的 使用 Guni
  • 如何拖动 NSStatusItems

    大家都知道 Mac OS X 中的菜单栏 或者更好的说法是 NSStatusBar 有些物品我可以移动 有些则不能 我希望能够拖动我的应用程序的 NSStatusItem 知道如何实现吗 尽管 NSStatusItems 出现在 Apple
  • 软堆:什么是损坏以及它为什么有用?

    我最近读了 Bernard Chazelle 的论文 The Soft Heap An Approximate Priority Queue with Optimal Error Rate by Bernard Chazelle http
  • 如何对部分路径使用 .htaccess 重定向?

    我必须调整网站上的一些路径 并且需要使用 htaccess 在用户访问旧网址时重定向项目 例如我的旧网址 相对 可能是 old path page1 php old path page2 php old path page3 php etc
  • 如何快速设置栏按钮的图像?

    我正在尝试为栏按钮项目设置一个图像 因为我有一个像这样的图像 分辨率为 30 30 但当我将此图像分配给 栏 按钮时 它看起来像 我已经这样分配图像 如果我尝试这种方式 例如为按钮制作 IBOutlet 并以编程方式设置图像this问题和代
  • 在新的材料设计中,是否有一个官方 API 用于在工具栏上居中标题,就像流行的 Android 应用程序一样?

    背景 过去 Google 总是显示工具栏以使标题左对齐 https material io develop android components app bar layout 然而 最近 似乎在它的一些应用程序上 标题居中 即使它的左右没有
  • 时间:2019-03-17 标签:c#XMLSchemavalidation

    我有一个很好的 XML 文件 如下所示
  • 使用 Launch4j 将 Java 应用程序固定到 Windows 7 任务栏

    我目前正在尝试将 Java 应用程序固定到 Windows 7 任务栏 该应用程序启动时使用Launch4j 程序图标显示正确 但右键单击任务栏上的图标仅显示带有 关闭窗口 条目的上下文菜单 没有用于将应用程序固定到任务栏的菜单条目 将 E
  • 使用js或html5以编程方式记录网页的音频输出?

    有没有办法以编程方式捕获使用 html5 js 或其他内容从网页播放的音频并从中创建 mp3 wav 文件 我知道网络音频 API 但我只能找到有关从麦克风输入录制音频的信息 而不是网页输出的信息 Thanks 您可以使用 Web Audi
  • Vue中JS和SCSS之间的共享变量

    我最近开始使用 Vue js 2 并且我很喜欢单文件组件结构
  • AngularJS orderby 整数字段无法正常工作

    我刚刚拿了最简单的演示http docs angularjs org api ng filter orderBy只需将年龄的值更改为不同的位数即可 它停止按预期工作 它的顺序类似于 字符串 而不是 整数 值 我应该如何更改它 以便它按年龄排
  • 如何突出显示 ggplot 上的方差?

    我不知道该如何提出这个问题 所以我使用了这个方法 我有一个经纬度数据集 下面发布的图像是我想要生成的 这是我的数据集 Latitude Longitude 21 06941667 71 07952778 21 06941667 71 079
  • 以编程方式获取设备的 Android API 级别?

    如何查明我的设备正在使用哪个 API 级别 固件版本为1 6 这是否意味着它使用 API 级别 4 您可以通过系统常量 Build VERSION SDK INT 例如 您可以通过以下方式运行一些需要更新 API 的代码 如果当前设备的 A
  • 如何将字符串的第一个字母大写

    我有一个像这样的字符串 var sentence string the biggest ocean is the Pacific ocean 我希望能够将第一个字母大写t在输入字符串中 使该字符串变为 The biggest ocean i