将字符串拆分为指定大小的块而不破坏单词 [英] Split a string into chunks of specified size without breaking words

查看:46
本文介绍了将字符串拆分为指定大小的块而不破坏单词的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要根据特定大小将字符串拆分为块.我不能在块之间断词,所以我需要在添加下一个单词时捕捉到超过块大小并开始下一个(如果块小于指定大小就可以).

I need to split a string into chunks according to a specific size. I cannot break words between chunks, so I need to catch when adding the next word will go over chunk size and start the next one (it's ok if a chunk is less than specified size).

这是我的工作代码,但我想找到一种更优雅的方法来做到这一点.

Here is my working code, but I would like to find a more elegant way to do this.

def split_into_chunks_by_size(chunk_size, string)
  string_split_into_chunks = [""]
  string.split(" ").each do |word|
    if (string_split_into_chunks[-1].length + 1 + word.length > chunk_size)
      string_split_into_chunks << word
    else
      string_split_into_chunks[-1] << " " + word
    end
  end
  return string_split_into_chunks
end

推荐答案

怎么样:

str = "split a string into chunks according to a specific size. Seems easy enough, but here is the catch: I cannot be breaking words between chunks, so I need to catch when adding the next word will go over chunk size and start the next one (its ok if a chunk is less than specified size)." 
str.scan(/.{1,25}\W/)
=> ["split a string into ", "chunks according to a ", "specific size. Seems easy ", "enough, but here is the ", "catch: I cannot be ", "breaking words between ", "chunks, so I need to ", "catch when adding the ", "next word will go over ", "chunk size and start the ", "next one (its ok if a ", "chunk is less than ", "specified size)."]

@sawa 评论后更新:

Update after @sawa comment:

str.scan(/.{1,25}\b|.{1,25}/).map(&:strip)

这更好,因为它不需要以 \W 结尾的字符串

This is better as it doesn't require a string to end with \W

它会处理超过指定长度的单词.实际上它会分裂它们,但我认为这是理想的行为

And it will handle words longer than specified length. Actually it will split them, but I assume this is desired behaviour

这篇关于将字符串拆分为指定大小的块而不破坏单词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆