我得到了一些数据:
def data = "# some useless text\n"+
"# even more\n"+
"finally interesting text"
我该如何获取其中的“有趣部分”?基本上所有行都不以#开头。
一个不错的选择是Groovy:
def data = '''# some useless text
|# even more
|finally interesting text'''.stripMargin()
List lines = data.split( '\n' ).findAll { !it.startsWith( '#' ) }
assert lines == [ 'finally interesting text' ]
data.eachLine {
if (!it.startsWith( '#' )
println it
}
使用split方法获取子字符串,然后检查每个子字符串是否以“#”开头。
例如:String[] splitData = data.split("\n");
for (String eachSplit : splitData) {
if (!eachSplit.startWith("#")) {
print(eachSplit);
}
}
以下是使用Groovy的元编程特性(http://groovy.codehaus.org/JN3525-MetaClasses)的解决方案:
def data = "# some useless text\n"+
"# even more\n"+
"finally interesting text"
String.metaClass.collectLines = { it ->
delegate.split('\n').findAll it
}
def result = data.collectLines{ !it.startsWith( '#' )}
assert result == ["finally interesting text"]
我会基于换行符 (\n) 来拆分字符串,然后忽略以 "#" 开头的行。
String[] lines = data.split("\n");
for (String line : lines) {
if (line.startsWith("#") {
continue;
}
//Do stuff with the important part
}
def data = '''\
# some useless text
# even more
finally interesting text'''
assert data.replaceAll(/#.*\n/, '') == 'finally interesting text'
Collection#grep
方法:assert data.split('\n').grep(~/[^#].*/) == ['finally interesting text']
PS:正则表达式万岁!=P
"\n"
处进行分割,而不是换行符\n
。 - Peter Elliott