2012-06-29 89 views
6

考慮下面的字符串要獲得在Groovy字符串分隔一個字符

String names = "Bharath-Vinayak-Harish-Punith" 

我想在字符串的形式,它僅包含巴拉斯得到輸出。 (直到第一次出現「 - 」運算符的字符串)。任何人都可以告訴我,我們怎麼做到這一點?

+1

順便說一句,這是功課某種? – River

+0

編號其實我在爲我的項目編碼時發現了同樣的情況。 –

回答

13

在一般情況下,我同意上一個答案中的split方法,但是當僅返回第一個字符串時,子字符串方法與程序員的工作量相同(並且對於非常大的字符串,計算工作):

String result = names.substring(0, names.indexOf('-')) 
+0

好吧,它正在工作。但是出現了很多「 - 」。爲什麼它只取第一個索引。 –

+1

@BharathAN [indexOf返回首次出現](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28java.lang.String%29) –

4

你可以使用分裂:

def theName = names.split(/-/)[0] 

分裂返回一個字符串數組,然後拿到第一個數組元素。

+0

kelly除split()或tokanize()以外的其他任何方法 –

+1

那麼,您可以使用indexOf來查找第一個「 - 」的位置,然後使用substring從字符串的開頭到短劃線之前的字符。但是,爲什麼你想要這樣做,而不是使用專爲此設計的內置函數呢? – Kelly

+0

split方法返回字符串數組。但我不需要所有的值,我只需要第一部分。我想簡單地說它使用拆分方法消耗更多的內存。 –

5

如果你使用Groovy 2.0(昨日發佈的),你可以這樣做:

String names = 'Bharath-Vinayak-Harish-Punith' 
String result = names.takeWhile { it != '-' } 
assert result == 'Bharath' 
+0

這是不工作groovy控制檯tim_yates .. –

+0

@BharathAN你使用的是Groovy 2.0嗎?你的意思是Web控制檯? Web控制檯正在運行1.8.4 ... –

1
def names= 'Bharath-Vinayak-Harish-Punith' 
assert "Bharath" == (names =~ /^(.*?)\-/)[0][1] 
1

的情況下,你有Apache Commons Lang庫可用(它是各種其他框架的一部分,例如Grails的):

def result = StringUtils.substringBefore(names, '-') 

最好的問候, 比約恩