string - 在长字符串中插入换行符——自动换行

标签 string r

这是我编写的一个函数,用于将长字符串分成不超过给定长度的行

strBreakInLines <- function(s, breakAt=90, prepend="") {
  words <- unlist(strsplit(s, " "))
  if (length(words)<2) return(s)
  wordLen <- unlist(Map(nchar, words))
  lineLen <- wordLen[1]
  res <- words[1]
  lineBreak <- paste("\n", prepend, sep="")
  for (i in 2:length(words)) {
    lineLen <- lineLen+wordLen[i]
    if (lineLen < breakAt) 
      res <- paste(res, words[i], sep=" ")
    else {
      res <- paste(res, words[i], sep=lineBreak)
      lineLen <- 0
    }
  }
  return(res)
}

它适用于我遇到的问题;但我想知道我是否可以在这里学到一些东西。是否有更短或更有效的解决方案,尤其是我可以摆脱 for 循环吗?

最佳答案

这个怎么样:

gsub('(.{1,90})(\\s|$)', '\\1\n', s)

它将字符串“s”分成最多90个字符的行(不包括换行符“\n”,但包括词间空格),除非有一个词本身超过90个字符,那么该词本身将占据一个整体线。

顺便说一句,你的功能似乎坏了——你应该更换
lineLen <- 0


lineLen <- wordLen[i]

关于string - 在长字符串中插入换行符——自动换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2351744/

相关文章:

r - 拆分列表每 n 个元素和 cbind,然后 rbind 切片

仅删除两个 facet_grid() X 标签中的一个

c# - 如何获取从头到某个字符后的子串?

Ruby 字符串剥离定义的字符

c++ - 为什么 `equal` 在 C++ 中适用于 const char*?

ruby - 如何在出现特定单词后添加换行符

c++ - 如何将 utf32 字符串转换为 Unicode 字符串

r - 提取r中数据框中每个字符串的第一部分

r - 使用 ggplot2 从动物园对象绘制多线图

r - dplyr NSE 中的多个列名