2012-06-29 22 views
6

Hãy xem xét các chuỗi bên dướiĐể có được chuỗi con trong Groovy tách ra bởi một nhân vật

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

Tôi muốn để có được đầu ra dưới dạng chuỗi nó chỉ chứa Bharath. (Chuỗi đến lần xuất hiện đầu tiên của toán tử "-"). Bất cứ ai cũng có thể cho tôi biết, làm thế nào chúng ta có thể làm điều này?

+1

Bằng cách này, là bài tập về nhà này của một số loại? – River

+0

Không. Trên thực tế tôi thấy cùng một loại tình huống trong khi viết mã cho dự án của tôi. –

Trả lời

13

Trong trường hợp chung, tôi đồng ý với phương thức split trong câu trả lời trước, nhưng khi chỉ trả về chuỗi đầu tiên, phương thức chuỗi con là cùng một lượng công việc cho lập trình viên (và, cho các chuỗi cực lớn, ít hơn việc tính toán):

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

tốt, nó đang hoạt động.Nhưng có nhiều lần xuất hiện "-" .Tại sao nó chỉ lấy chỉ mục đầu tiên. –

+1

@BharathAN [indexOf trả về lần xuất hiện đầu tiên] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#indexOf%28java.lang.String%29) –

4

Bạn có thể sử dụng phân chia:

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

chia trả về một mảng String, sau đó nhận được các phần tử mảng đầu tiên.

+0

kelly bất kỳ phương pháp nào khác ngoài split() hoặc tokanize() –

+1

Vâng, bạn có thể sử dụng indexOf để tìm vị trí của "-" đầu tiên sau đó sử dụng chuỗi con để lấy từ đầu chuỗi đến ký tự ngay trước dấu gạch ngang. Nhưng tại sao bạn lại muốn làm điều này hơn là sử dụng các hàm dựng sẵn được thiết kế để làm điều này? – Kelly

+0

phương thức tách trả về mảng chuỗi. Nhưng tôi không cần tất cả các giá trị, tôi chỉ cần part.I đầu tiên nghĩ đơn giản nó tiêu thụ bộ nhớ nhiều hơn bằng cách sử dụng phương pháp chia. –

5

Nếu bạn đang sử dụng Groovy 2.0 (phát hành ngày hôm qua), bạn có thể làm:

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

đây là không làm việc bảng điều khiển groovy tim_yates .. –

+0

@BharathAN Bạn đang sử dụng Groovy 2.0? Bạn có nghĩa là giao diện điều khiển web? Bảng điều khiển web đang chạy 1.8.4 ... –

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

trong trường hợp bạn cóThư việncó sẵn (là một phần của các khuôn khổ khác nhau, ví dụ: Grails):

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

Trân trọng, Björn

Các vấn đề liên quan