2010-07-02 17 views
18

रूबी स्ट्रिंग में, मैं प्रत्येक एक्स वर्णों की एक जगह कैसे डाल सकता हूं?रूबी: प्रत्येक एक्स संख्या के अक्षरों को रिक्त स्थान

उदाहरण के तौर पर, मैं किसी दिए गए स्ट्रिंग के प्रत्येक 8 वर्णों को एक स्थान डालना चाहता हूं।

+0

संभव डुप्लिकेट [मैं रूबी में हर चार पूर्णांक के बीच रिक्त स्थान कैसे बना सकता हूं?] (Http://stackoverflow.com/questions/3053328/how-do-i-create-spaces-between-every-four-integers -इन-रूबी) –

उत्तर

22
>> s = "1234567812345678123456781234567812345678" 
=> "1234567812345678123456781234567812345678" 
>> s.gsub(/(.{8})/, '\1 ') 
=> "12345678 12345678 12345678 12345678 12345678 " 

संपादित करें: आप सकारात्मक अग्रदर्शी इस्तेमाल कर सकते हैं अंत में एक अतिरिक्त स्थान जोड़ने से बचने के लिए:

>> s.gsub(/(.{8})(?=.)/, '\1 \2') 
=> "12345678 12345678 12345678 12345678 12345678" 
+0

बंद करें। प्रत्येक 8 अक्षरों के बारे में क्या, लेकिन स्ट्रिंग के अंत में कोई स्थान नहीं जोड़ते? – Shpigford

+3

बस एक 'स्ट्रिप!' जोड़ें। तो यह 's.gsub (/ (। {8}) /, '\ 1') में बदल जाएगा। स्ट्रिप!' –

+1

क्या होगा यदि स्ट्रिंग में प्रारंभिक रूप से अग्रणी या पीछे की जगहें हों? – Nabb

16

वैकल्पिक समाधान:

s.scan(/.{1,8}/).join(' ') 

String#scan इच्छा यह हिस्सा ऊपर आप के लिए (8 अक्षरों के स्पैन में - अंतिम खंड को छोड़कर, जो छोटा हो सकता है), और फिर Array#join भागों को फिर से जोड़ देगा वांछित चरित्र interspersed।

संबंधित मुद्दे