如何在字符串中获取行数?

总的来说,我从包含“\ \ n”符号的 JSON 对中得到一个字符串。例如,

“我可以看到地球如何滋养它的草,\ \ n从颗粒细腻的土地中分离出来,\ \ n用自己的残骸刺穿自己\ \ n忍受着表面上爬行的昆虫。\ \ n 我可以看到像绿色浪潮一样,\ \ n它抬起土壤,膨胀,\ \ n根如何穿透周围的压痕,\ \ n愉快地吸入天空中的空气。\ \ n我可以看到光线照亮了花朵,- \ \ n将自己灌输到它们的紧密芽中!\ \ n地球和草 - 继续生长!\ \ n淹没山脉 在一片翠绿的海洋中... \ \ n哦,年轻人的运动力量, \ \ n植物的肌肉牵引力!\ \ n向行星、太阳和你打开,\ \ n穿越林下到新鲜的春天空气!”

这个字符串是一幅图片的诗歌。

现在我需要根据文本长度调整我的 display.newText 对象的大小。

这是我如何做到的:

  1. 获取行数(“\ \ n”数目+1,因为末尾没有“\ \ n”)
  2. 在循环中获取最长的行
  3. 设置 display.newText 对象的大小。可能使用 fontSize 计算系数...

问题是:如何获得行数?

点赞
用户1009479
用户1009479

为了获取一个字符串中 '\n' 的数量,可以使用 string.gsub 函数,它用于字符串替换,但它也可以返回匹配的数量作为第二个返回值。

local count  = select(2, str:gsub('\n', '\n'))

或者相似的方式:

local _, count = str:gsub('\n', '\n')
2014-07-11 06:05:12
用户6202210
用户6202210

这显然比 @Yu Hao 的两个解决方案快得多

本地函数  获取行数(字符串)
    本地变量  行数 = 1
    循环  i = 1, #字符串  执行
        本地变量  c = 字符串:子串(i,i)
        如果  c == '\n' 那么 行数 = 行数 + 1 
    结束循环

    返回  行数
结束函数
2021-11-27 18:37:53