用多行遍历字符串
Posted
技术标签:
【中文标题】用多行遍历字符串【英文标题】:Iterate through String with multiple lines 【发布时间】:2013-01-05 03:14:24 【问题描述】:我得到了一些数据:
def data = "# some useless text\n"+
"# even more\n"+
"finally interesting text"
我怎样才能得到其中“有趣的部分”?所以基本上所有的行,不以#开头。
【问题讨论】:
【参考方案1】:如何通过split function用\n字符分割字符串
现在你可以通过String.startsWith("#") .
测试每个字符串是否以#开头
【讨论】:
【参考方案2】:我会根据换行符 (\n) 拆分字符串,然后忽略以“#”开头的行。
String[] lines = data.split("\n");
for (String line : lines)
if (line.startsWith("#")
continue;
//Do stuff with the important part
请注意,这是纯 Java。
【讨论】:
这将拆分文字"\n"
,而不是换行符 \n
【参考方案3】:
使用split method 获取子字符串,然后检查每个子字符串是否以“#”开头。 例如:
String[] splitData = data.split("\n");
for (String eachSplit : splitData)
if (!eachSplit.startWith("#"))
print(eachSplit);
【讨论】:
【参考方案4】:一个 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' ]
【讨论】:
【参考方案5】:不需要将输入字符串转换为列表的基于正则表达式的解决方案是:
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:正则表达式 FTW! =P
【讨论】:
【参考方案6】:这是使用 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"]
【讨论】:
【参考方案7】:data.eachLine
if (!it.startsWith( '#' )
println it
【讨论】:
以上是关于用多行遍历字符串的主要内容,如果未能解决你的问题,请参考以下文章