2009-03-25 26 views
8

Có/không-câu hỏi: Có hàm Groovy GDK để viết hoa ký tự đầu tiên của chuỗi không?Groovy GDK tương đương với Apache Commons StringUtils.capitalize (str) hoặc Perl's ucfirst (str)

Tôi đang tìm kiếm một tương đương Groovy của ucfirst của Perl (..) hoặc Apache Commons StringUtils.capitalize (str) (sau này viết hoa chữ cái đầu tiên của tất cả các từ trong chuỗi đầu vào).

tôi đang mã hóa này bằng tay sử dụng ..

str = str[0].toUpperCase() + str[1 .. str.size() - 1] 

.. mà làm việc, nhưng tôi giả sử có một cách Groovy hơn để làm điều đó. Tôi muốn tưởng tượng ucfirst (..) là một hoạt động phổ biến hơn so với trung tâm nói (..) là một phương pháp tiêu chuẩn trong Groovy GDK (xem http://groovy.codehaus.org/groovy-jdk/java/lang/String.html).

Trả lời

21

Không, không có gì được tích hợp trực tiếp vào ngôn ngữ.

Có một vài cách hấp dẫn hơn để làm những gì bạn đang yêu cầu (nếu bạn không muốn sử dụng StringUtils theo cách thành ngữ Java như Vladimir gợi ý).

Bạn có thể đơn giản hóa phương pháp bạn sử dụng một giá trị âm trong nửa cuối của phạm vi của bạn:

def str = "foo" 

assert "Foo" == str[0].toUpperCase() + str[1..-1] 

Hoặc bạn có thể sử dụng một khẩu tĩnh để làm cho nó trông giống như một phương pháp có nguồn gốc:

import static org.apache.commons.lang.StringUtils.* 

assert "Foo" == capitalize("foo") 

Bạn cũng có thể sửa đổi metaClass để có tất cả các phương thức StringUtils ngay trên nó, do đó, nó trông giống như một phương thức GDK:

import org.apache.commons.lang.StringUtils 

String.metaClass.mixin StringUtils 

assert "Foo" == "foo".capitalize() 
+1

+1 cho String.metaClass.mixin. Tôi không biết về điều đó –

+0

Grails người dùng hãy cẩn thận nếu bạn đang làm mixin trong Bootstrap nó có thể làm bạn đau buồn, xem: http://stackoverflow.com/questions/10843070/gsp-rendering-issue-after-server-is -giờ qua đêm / – Steve

6

Tôi không biết về bất kỳ phương pháp như vậy, nhưng một workaround là để trực tiếp sử dụng thư viện Apache Commons trong mã Groovy của bạn:

import org.apache.commons.lang.StringUtils 

def str = StringUtils.capitalize(input) 

Nó làm cho mã Groovy của bạn một chút Java-ish (một số có thể không thích nó) nhưng nó thực hiện công việc.

IMO lợi thế lớn của Groovy là bạn có thể dễ dàng tận dụng tất cả các thư viện Java mà bạn thường sử dụng với cơ sở mã Java truyền thống hơn.

0

Để làm cho nó có sẵn trên toàn cầu trong ứng dụng của bạn, chỉ cần khởi khối này lúc khởi động

String.metaClass.capitalize = { đại biểu [0] .toUpperCase() + đại biểu [1 ..- 1] }

0

Nếu bạn muốn mang nó một bước xa hơn và tận dụng mỗi từ, bạn có thể sử dụng một cái gì đó như thế này:

def words = sentence.split(" ") 
def newStr = [] 
words.each { w -> 
    def capW = [w[0].toUpperCase()] 
    if (w.length() > 1) { 
     capW << w[1..-1].toLowerCase() 
    } 
    newStr << capW.join() 
} 
return newStr.join(' ') 
0

bạn cũng có thể thử điều này:

"hey this is a string".split(' ').collect{it.capitalize()}.join(' ')

hoặc có thể là thế này:

char c = ' ' "hey this is a string".collect{ c = c==' '?it.capitalize():it }.join()

0

Tính đến Groovy 1.8.2 (phát hành cách trở lại trong tháng 9 năm 2011), capitalize() là một built-in tăng cường để CharSequenceString cụ.

def str = "hello world" 
str = str.capitalize() 
assert "Hello world" == str 
Các vấn đề liên quan