सीमांकक के साथ स्ट्रिंग का विभाजन


94

मैं वर्तमान में एक स्ट्रिंग को विभाजित करने की कोशिश कर रहा 1128-2हूं ताकि मेरे पास दो अलग-अलग मान हो सकें। उदाहरण के लिए, मान 1: 1128 और मान 2: 2, ताकि मैं तब प्रत्येक मान का अलग-अलग उपयोग कर सकूं। मैंने कोशिश की split()लेकिन कोई सफलता नहीं मिली। क्या कोई विशिष्ट तरीका है कि ग्रेल्स इसे संभालती है, या इसे करने का एक बेहतर तरीका है?


मैं उत्सुक हूँ कि यह सिर्फ विभाजन के साथ क्यों काम नहीं किया? (a, b) = "ab" .split ("-") मेरे लिए ठीक काम करता है (और मेरा मानना ​​है कि यह जावा में भी काम करेगा)। मैं इसका हर समय उपयोग करता हूं। संपादित करें: बस इसे देखते हुए वे थोड़ा अलग हैं - एक सरणी को विभाजित करता है जबकि टोकन एक ArrayList रिटर्न देता है। वस्तुतः ग्रूवी में समान रूप से, विभाजन का यह फायदा है कि यह जावा में आसानी से पोर्ट करता है, मुझे नहीं लगता है कि टोकन स्ट्रिंग पर एक जावा विधि है (जब तक कि यह काफी नया नहीं है और मुझे यह याद नहीं है)
बिल के।

जवाबों:


170

प्रयत्न:

def (value1, value2) = '1128-2'.tokenize( '-' )

30
यह splitबनाम tokenize tothenew.com/blog/groovy-tokenize-vs-split
Snekse

5
ओह, और सावधान रहें यदि आप एक पाइप की तरह कुछ वर्णों में विभाजित कर रहे हैं |। आपको char stackoverflow.com/questions/3842537/…
Snekse

2
हाँ, कॉस स्प्लिट एक नियमित अभिव्यक्ति का उपयोग करता है
tim_yates

61

कैसे बुला रहे हो split? यह इस तरह काम करता है:

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

10
मुझे लगता है कि एक किनारे मामले को जोड़ना बहुत उपयोगी है जिसे आप 'द्वारा विभाजित करते समय चला सकते हैं।' चार। तो आपको डॉट से बचने की आवश्यकता होगी यदि आप शाब्दिक बिंदु पर विभाजित करना चाहते हैं: String extensionRemoved = filename.split("\\.")[0]; अन्यथा आप regex पर विभाजन कर रहे हैं। जिसका अर्थ है "कोई भी चरित्र"। ध्यान दें कि रेगेक्स में सिंगल बैकस्लैश बनाने के लिए आवश्यक डबल बैकस्लैश।
एक्सपीरिएल बैरिरो

उसके लिए धन्यवाद। इस विधि के रूप में लिखा गया था कि संभव के रूप में कई लोगों को भ्रमित करने के लिए।
डस्टिन

@ExequielBarrirero उस टिप्पणी ने आज मेरी जान बचाई
user3692823

22

def (value1, value2) = '1128-2'.split('-') कार्य करना चाहिए।

किसी को भी Groovy कंसोल में यह कोशिश कर सकते हैं?

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

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

1
मुझे इसमें समस्या थी, अगर आप किसी प्रकार के रेगेक्स चार्ट पर विभाजित करना चाहते हैं। या *। आपको इससे बचने की जरूरत है, उन मामलों में भी टोकन काम करता है।
चंडंक

5

आप भी कर सकते हैं:

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 ()


स्प्लिट वास्तव में ठीक काम करता है, समझ गलत है, कृपया नीचे देखें, स्ट्रिंग [] स्प्लिट_कोम_बायप्रोपरेटी = स्ट्रींगयौवंटोसप्लिट.स्प्लिट (",");
सत्य

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
     }
   }
}

हैलो! हालांकि यह कोड प्रश्न को हल कर सकता है, जिसमें यह भी बताया गया है कि यह समस्या कैसे और क्यों हल करती है, इससे वास्तव में आपके पोस्ट की गुणवत्ता को बेहतर बनाने में मदद मिलेगी, और संभवत: अधिक वोटों का परिणाम होगा। याद रखें कि आप भविष्य में पाठकों के लिए सवाल का जवाब दे रहे हैं, न कि केवल उस व्यक्ति से जो अब पूछ रहा है। कृपया स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें और संकेत दें कि क्या सीमाएँ और मान्यताएँ लागू होती हैं।
ब्रायन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.