그루비 (Groovy) 프로그램에서 필자는 줄의 목록을 가지고 목록에서 연속적인 줄 블록을 선택하려고합니다. 원하는 블록의 첫 번째 줄에는 특정 문자열이 들어 있으며, 마지막 줄 (포함 할 수도 있고 붙이지 않을 수도 있음)은 (다른) 마커 문자열을 포함합니다.그루비 (Groovy)리스트에서 한 행의 블록을 선택하는 방법
아래 작업 코드는 있지만 한 줄 또는 두 줄에서이 작업을 수행하는 "그루브 (groov)"방법이 있습니다. 누구든지 어떻게 제안 할 수 있습니까?
는 는(는 HTTP는 GET,하지만 난 그냥 URL 객체를 정의하고 url.openStream().의 readlines()가 선을 얻을 않는에서 실제로 라인의 내 목록입니다.)
lines = ["line1", "line2", "line3", "line4", "line5", "line6"]
println extract_block("2", "5", lines)
def extract_block(start, end, lines) {
def block = null
for (line in lines) {
if (null == block && line.contains(start)) { block = [] }
if (null != block && line.contains(end)) { break }
if (null != block) { block << line }
}
return block
}
이것은
를 인쇄["line2", "line3", "line4"]
첫 번째 줄 ("2"포함)을 포함하고 마지막 줄 ("5"포함)은 건너 뜁니다.
나는 멀리 정규 표현식에에서 유지하려고 노력했다. 일부 주석은 정규 표현식이 더 많은 라인을 필요로한다는 것을 이해할 수 있습니다. 그러나 나는 오히려 정말 짧고 소화 가능한 것을 사용하려고합니다. –