2010-10-21 15 views
26

मुझे स्कैला युक्त एक स्वरूपित स्ट्रिंग मुद्रित करने की आवश्यकता है। लंबा। java.lang.String.format() scala.Long (समय संकलन) और RichLong (java.util.IllegalFormatConversionException) के साथ असंगत हैस्कैला में स्ट्रिंग कैसे प्रारूपित करें?

संकलक अगले कार्य कोड पर पूर्णांक की निंदा के बारे में चेतावनी देते हैं:

val number:Long = 3243 
String.format("%d", new java.lang.Long(number)) 

क्या मुझे फ़ॉमेटर, डेटा प्रकार या कुछ और बदलना चाहिए? ताकि आप की जरूरत नहीं है/स्थिर वर्ग विधि चाहते हैं, सीधे उदाहरणों स्ट्रिंग की पर

val number: Long = 3243 
"%d".format(number) 
+0

क्या यह एक टाइपो है जिसे आप लंबे समय से एक इंटीजर में परिवर्तित कर रहे हैं? –

उत्तर

40

आप की तरह कुछ कोशिश कर सकते हैं। आपको long आदिम मैन्युअल रूप से बॉक्स करने की आवश्यकता नहीं है, कंपाइलर को आपके लिए यह सब कुछ ख्याल रखना चाहिए!

String.format("%d", new java.lang.Integer(number)) 

इसलिए बेहतर रूप में

"%d".format(number) 
+9

** यह बताने में भी मूल्य है कि ** यह क्यों होना चाहिए। इस मामले में –

+0

'.format' 'स्ट्रिंगलाइक' की विधि होगी जो स्ट्रिंग अक्षर से पूरी तरह से बनाई गई है। – expert

20

स्काला में प्रारूप विधि मौजूद है:

7

लिखा @ ब्रूनो जवाब क्या आप ज्यादातर मामलों में इस्तेमाल करना चाहिए है।

आप स्वरूपण करने के लिए एक जावा विधि का उपयोग करना आवश्यक है,

String.format("%d",number.asInstanceOf[AnyRef]) 

जो जावा के लिए अच्छी तरह से Long बॉक्स होगा का उपयोग करें।

+0

यह काम करता है। क्या आपको पता है कि यह मेरे रिचलॉन्ग दृष्टिकोण के साथ रनटाइम त्रुटि क्यों नहीं करेगा? – Basilevs

+2

'RichLong' जावा के लिए है, बस कुछ यादृच्छिक वर्ग। जावा को "% d" 'के अनुरूप एक बॉक्स किए गए आदिम पूर्णांक को देखने की उम्मीद है। तो निश्चित रूप से जब जावा 'रिचलांग' प्राप्त होता है तो जावा फिट बैठता है। 'AsInstanceOf [AnyRef]' preavaually बॉक्स 'java.lang' वर्ग में,' रिच 'वर्ग नहीं है। –

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