구분 기호로 문자열 분할


96

현재 1128-2두 개의 개별 값을 가질 수 있도록 문자열을 분할하려고 합니다. 예를 들어 value1 : 1128 및 value2 : 2이므로 각 값을 개별적으로 사용할 수 있습니다. 나는 시도 split()했지만 성공하지 못했습니다. Grails가이를 처리하는 특정한 방법이 있습니까, 아니면 더 나은 방법이 있습니까?


왜 이것이 그냥 분할로 작동하지 않았는지 궁금합니다. (a, b) = "ab".split ( "-") 잘 작동합니다 (그리고 Java에서도 작동 할 것이라고 믿습니다). 나는 항상 그것을 사용합니다. 편집 : 그것을 보면 약간 다릅니다 .split은 배열을 반환하고 tokenize는 ArrayList를 반환합니다. 사실상 Groovy에서도 마찬가지입니다. 분할은 Java로 쉽게 포팅된다는 장점이 있습니다. tokenize는 String의 Java 메소드라고 생각하지 않습니다 (꽤 새롭고 제가 놓친 경우가 아니라면)
Bill K

답변:



62

어떻게 전화 해 split? 다음과 같이 작동합니다.

def values = '1182-2'.split('-')
assert values[0] == '1182'
assert values[1] == '2'

10
'.'로 분할 할 때 부딪 힐 수있는 엣지 케이스를 추가하는 것이 매우 유용하다고 생각합니다. 숯. 따라서 리터럴 점으로 분할하려면 점을 이스케이프해야합니다. String extensionRemoved = filename.split("\\.")[0]; 그렇지 않으면 "모든 문자"를 의미하는 regex.에서 분할합니다. 정규식에서 단일 백 슬래시를 만드는 데 필요한 이중 백 슬래시에 유의하십시오.
Exequiel Barrirero

감사합니다. 이 방법은 최대한 많은 사람들을 혼란스럽게하는 것처럼 작성되었습니다.
Dustin Oprea

@ExequielBarrirero 그 코멘트가 오늘 내 생명을 구했습니다
user3692823

23

def (value1, value2) = '1128-2'.split('-') 작동해야합니다.

누구든지 Groovy Console에서 이것을 시도해 볼 수 있습니까?

def (v, z) =  '1128-2'.split('-')

assert v == '1128'
assert z == '2'

1
.NET과 같은 일부 유형의 정규식 문자로 분할하려는 경우 문제가 발생했습니다. 또는 *. 이스케이프해야하며 토큰 화는 이러한 경우에도 작동합니다.
chandank

6

다음을 수행 할 수도 있습니다.

Integer a = '1182-2'.split('-')[0] as Integer
Integer b = '1182-2'.split('-')[1] as Integer

//a=1182 b=2

4

분할은 그루비에서 그렇게 작동하지 않습니다. 토큰 화를 사용해야합니다 ...

문서를 참조하십시오.

http://groovy-lang.org/gdk.html#split ()


분할은 실제로 잘 작동합니다. 이해가 잘못되었습니다. 아래를 참조하십시오. String [] split_Comma_ByProperty = Stringyouwanttosplit.split ( ",");
sathya

0
dependencies {
   compile ('org.springframework.kafka:spring-kafka-test:2.2.7.RELEASE') { dep ->
     ['org.apache.kafka:kafka_2.11','org.apache.kafka:kafka-clients'].each { i ->
       def (g, m) = i.tokenize( ':' )
       dep.exclude group: g  , module: m
     }
   }
}

여보세요! 이 코드가 문제를 해결할 수 있지만 문제를 해결하는 방법과 이유에 대한 설명포함 하여 게시물의 품질을 향상시키는 데 실제로 도움이되며 더 많은 찬성 투표가 발생할 수 있습니다. 지금 질문하는 사람뿐만 아니라 미래에 독자를 위해 질문에 답하고 있다는 것을 기억하십시오. 제발 편집 설명을 추가하고 제한 및 가정이 적용 무엇의 표시를 제공하는 답변을.
Brian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.