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

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/

10-12 17:19