拆分长串而不会破坏单词

时间:2016-09-05 15:03:37

标签: ruby string

我必须显示多个长字符串(长度不同),但我只能显示需要它们在275到295个字符之间的字符串块。

因此,如果我有一个3000字的字符串,它将显示大约10个字符。

我正在寻找找到下一个空白的方法。 例如:

@InjectMocks
Service service = null;

@Test
public void testMethod() {

service.methodToTest();

PowerMockito.mockStatic(Static.class);
PowerMockito.verifyStatic();
final Class2 check = getCheck();
Static.methodToVerify(Matchers.any(Service.class),Matchers.eq(check));
}

我想找到275-295个字符范围内的下一个空白的索引,但我找不到如何在Ruby中做到这一点。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

Rails有一个方法word_wrap,它使用一个简单的正则表达式:

str = 'Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat. Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'

puts str.gsub(/(.{1,80})(\s+|$)/, "\\1\n")

输出:

Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor
incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat. Quis aute
iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui
officia deserunt mollit anim id est laborum.

正则表达式匹配(并捕获)最多80个字符(.{1,80}),后跟空格或行尾(\s+|$)。

答案 1 :(得分:1)

不使用常规表达式,将输入分开并将其重新组合在一起:

str = 'Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat. Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'

def reformat_wrapped(s, width=78)
  lines = []
  line = ""
  s.split(/\s+/).each do |word|
    if line.size + word.size >= width
      lines << line
      line = word
    elsif line.empty?
      line = word
    else
      line << " " << word
    end
  end
  lines << line if line
  return lines.join "\n"
end

#=>puts reformat_wrapped(str, 78)

Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor
incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquid ex ea commodi consequat.
Quis aute iure reprehenderit in voluptate velit esse cillum dolore eu fugiat
nulla pariatur. Excepteur sint obcaecat cupiditat non proident, sunt in culpa
qui officia deserunt mollit anim id est laborum.