Golang中按长度分割字符串

2024-05-18

有谁知道如何在 Golang 中按长度分割字符串?

例如,每 3 个字符分割“helloworld”,那么理想情况下它应该返回一个“hel”“low”“orl”“d”数组?

或者,一个可能的解决方案是在每 3 个字符后附加一个换行符。

所有的想法都非常感谢!


确保convert http://golang.org/ref/spec#Conversions your string http://blog.golang.org/strings进入一片符文:参见“将字符串切成字母 https://stackoverflow.com/q/18556693/6309".

for自动转换string to rune因此在这种情况下不需要额外的代码来转换string to rune first.

for i, r := range s {
    fmt.Printf("i%d r %c\n", i, r)
    // every 3 i, do something
}

r[n:n+3]与符文切片配合使用效果最佳。

该指数将增加one每个符文,虽然它可能每字节增加一以上 in a 字符串切片 http://blog.golang.org/slices#TOC_12.: "世界": i将为 0 和 3:一个字符(符文)可以由多个字节组成。


For instance, consider s := "世a界世bcd界efg世": 12 runes. (see play.golang.org http://play.golang.org/p/MdsEq53DfP)

如果您尝试逐字节解析它,您将错过(在每 3 个字符实现的天真分割中)一些“索引模 3”(等于 2、5、8 和 11),因为索引将增加超过这些价值观:

for i, r := range s {
    res = res + string(r)
    fmt.Printf("i %d r %c\n", i, r)
    if i > 0 && (i+1)%3 == 0 {
        fmt.Printf("=>(%d) '%v'\n", i, res)
        res = ""
    }
}

输出:

i  0 r 世
i  3 r a   <== miss i==2
i  4 r 界
i  7 r 世  <== miss i==5
i 10 r b  <== miss i==8
i 11 r c  ===============> would print '世a界世bc', not exactly '3 chars'!
i 12 r d
i 13 r 界
i 16 r e  <== miss i==14
i 17 r f  ===============> would print 'd界ef'
i 18 r g
i 19 r 世 <== miss the rest of the string

但如果你要迭代符文(a := []rune(s)),您将得到您所期望的结果,因为索引一次会增加一个符文,从而可以轻松聚合恰好 3 个字符:

for i, r := range a {
    res = res + string(r)
    fmt.Printf("i%d r %c\n", i, r)
    if i > 0 && (i+1)%3 == 0 {
        fmt.Printf("=>(%d) '%v'\n", i, res)
        res = ""
    }
}

Output:

i 0 r 世
i 1 r a
i 2 r 界 ===============> would print '世a界'
i 3 r 世
i 4 r b
i 5 r c ===============> would print '世bc'
i 6 r d
i 7 r 界
i 8 r e ===============> would print 'd界e'
i 9 r f
i10 r g
i11 r 世 ===============> would print 'fg世'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang中按长度分割字符串 的相关文章

  • AsyncTask:DoInBackground(String ...)与DoInBackground(Params ...)冲突?

    当尝试使用时Async task要执行 HTTP post 我得到以下信息 ASyncTask DoInBackground String clashes with DoInBackground Params in Android os A
  • 将字符串转换为字符并按降序排序(ascii)

    我正在创建一个程序 该程序将使用户输入整数 一个接一个 存储在数组中并按降序显示整数 该程序还要求用户输入一个字符串 使用以下命令将其转换为字符string toCharArray 我已经正确地按降序显示整数 问题是我不知道如何按降序显示字
  • 管理多租户 ArangoDB 连接

    我使用 ArangoDB Go 使用 go driver 并且需要实现多租户 这意味着每个客户都将在单独的数据库中拥有他的数据 我想要弄清楚的是如何使这种多租户发挥作用 我知道为每个请求创建一个新的数据库连接是不可持续的 这意味着我必须维护
  • 以 str.format 切片字符串

    我想实现以下目标str format x y 1234 5678 print str x 2 str y 2 我能够做到这一点的唯一方法是 print 0 1 format str x 2 str y 2 现在 这是一个例子 我真正拥有的是
  • MySql 查询在选择中将 NULL 替换为空字符串

    如何用空字符串替换 select 中的 NULL 值 输出 NULL 值看起来不太专业 这是非常不寻常的 根据我的语法 我希望它能够工作 我希望能得到一个解释 为什么没有 select CASE prereq WHEN prereq IS
  • Python,将字典存储在数据库中

    在数据库中存储和检索 python 字典的最佳方法是什么 如果您对使用传统 SQL 数据库 例如 MySQL 不是特别感兴趣 您可以研究非结构化文档数据库 其中文档自然映射到 python 字典 例如MongoDB http www mon
  • 使用生成的 Golang DLL 返回字符串或 *C.Char

    我一直在努力追随z505 goDLL https github com z505 goDLL回购并遇到了一个大问题 该方法无法返回字符串 我无法读取结果的输出变量 这是我到目前为止使用的代码 Go 完整代码https play golang
  • 如何用空新行分割字符串

    我的文件包含这个字符串 a b c 现在我想阅读它并用空行分割它 所以我有这个 text split n n where text is output of file 问题是这不起作用 当我将新行转换为字节时 我看到 n n 表示为 10
  • 如何将逗号分隔的字符串解析为列表(警告)?

    我需要能够采用如下字符串 foo bar one two three four into foo bar one two three four 我有一种感觉 来自 python 的提示 解决方案将涉及 shlex 模块 这取决于您想要变得多
  • Notepad++:: 通过正则表达式完全删除包含问号的行

    嗯 我想这就是我的标题 这对于我将要实现的目标来说是不言自明的 这是我当前的文本文件的示例 Diva was the winning song of the Eurovision Song Contest 1998 Who will win
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • SWI Prolog 转义引号

    我需要在序言中将 放在字符串周围 我从另一个程序获取输入 看起来我无法转义该程序中的 因此我必须在序言中添加 否则序言语句将不起作用 感谢您的帮助 为了讨论strings https stackoverflow com a 39922411
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但
  • Go的堆接口实现的优先级队列的大小限制

    在Java中 有一个具有大小属性 的PriorityQueue 我在这里也期待同样的事情 如果我没记错的话 用例 一一读取数百万数据并将其发送到优先级队列 我只想要前 5 个计算元素 因此我只想要大小为 5 的堆 优先级队列 我正在尝试使用
  • 解析格式化字符串

    我正在尝试创建一个通用格式化程序 解析器组合 示例场景 我有一个 string Format 的字符串 例如var format 0 1 我有一个用于输入的对象 字符串 数组 例如var arr new asdf qwer 我正在使用格式字
  • 如何在Google AppEngine上设置环境变量?

    我正在尝试在谷歌应用程序引擎上设置和使用环境变量 我的 app yaml 文件如下所示 但是 当我使用 os Getenv mytoken 时 我得到一个空字符串 而不是我设置的实际值 是GAE的bug吗 api version go1 h
  • golang 中 *(*int)(nil) = 0 是什么意思?

    我注意到有一行 int nil 0在功能上throw https github com golang go blob master src runtime panic go L1113 go nosplit func throw s str
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 如何对字符串列表进行排序?

    在 Python 中创建按字母顺序排序的列表的最佳方法是什么 基本回答 mylist b C A mylist sort 这会修改您的原始列表 即就地排序 要获取列表的排序副本而不更改原始列表 请使用sorted http docs pyt

随机推荐