2011-05-18 14 views
16

स्काला String विधि (वर्ग StringOps में) stripMargin अप करने के लिए एक बहु लाइन String की प्रत्येक पंक्ति से प्रमुख खाली स्थान के और पाइप (|) वर्ण (या अन्य नामित सीमांकक) सहित निकाल देता है।स्काला पट्टी पिछली श्वेत रिक्ति

क्या प्रत्येक पंक्ति से पिछला सफेद स्थान निकालने के लिए कोई समकक्ष विधि है?

मैंने स्केलडॉक्स के माध्यम से एक त्वरित रूप से देखा, लेकिन एक नहीं मिला।

उत्तर

21

आप आसानी से उस के लिए एक regex का उपयोग कर सकते हैं:

input.replaceAll("""(?m)\s+$""", "") 

regex में (?m) उपसर्ग यह एक बहु regex बनाता है। \s+ लाइन 1 या अधिक सफेद जगहों और $ लाइन के अंत (मल्टीलाइन ध्वज की वजह से) से मेल खाता है।

1

शायद: s.lines.map(_.reverse.stripMargin.reverse).mkString("\n") या के बजाय System.getProperty("line.separator") के साथ?

2

यह सबसे कारगर तरीका हो सकता है नहीं हो सकता है, लेकिन आप भी ऐसा कर सकता है:

scala> println("<"+" abc ".trim+">") 
<abc> 
+0

अच्छी 'रेखाएं', लेकिन '_ == '' संभव है –

+0

हाँ, मैंने सोचा कि मैंने पोस्ट करने के बाद। –

21

जावा String विधि trim शुरुआत और अंत से खाली स्थान के निकाल देता है 'एन' mkString (एक rock'n'roller की तरह):

val lines = """ 
This is 
a test 
    a foolish 
    test 
    a 
test 
t 
""" 

lines.split ("\n").map (_.trim).mkString ("\n") 

res22: String = 

This is 
a test 
a foolish 
test 
a 
test 
t 
+6

लेकिन यह केवल मल्टी-लाइन स्ट्रिंग के क्रमशः पहले और रेखा रेखाओं से व्हाइटस्पेस को हटा देगा। – Ralph

+0

@ राल्फ आह, वास्तव में। माफ़ कीजिये। –

5

स्प्लिट 'एन' ट्रिम:

val trimmed = str.lines map { s => s.reverse.dropWhile (c => c == ' ').reverse.mkString(System.getProperty("line.seperator")) 
+0

नोट: विभाजन ("\ n") रेगेक्स मिलान का उपयोग करता है। स्प्लिट ('\ n') का उपयोग करना इसके बजाय इच्छित अर्थ को बेहतर ढंग से व्यक्त करना प्रतीत होता है (हाल ही की दुनिया में कोई प्रदर्शन अंतर नहीं होगा, क्योंकि स्प्लिट एक ही चरित्र पैटर्न के लिए विशेष आवरण है - देखें [जावा स्प्लिट स्ट्रिंग प्रदर्शन] (http: // stackoverflow .com/एक/11002374/16673)। – Suma