2009-09-24 14 views
56

में एक स्ट्रिंग का सुरुचिपूर्ण रूपांतरण जावा में आप Boolean.valueOf(myString) लिख सकते हैं। हालांकि स्कैला में, java.lang.Booleanscala.Boolean से छिपा हुआ है जिसमें इस कार्य की कमी है। बूलियन के मूल जावा संस्करण का उपयोग करने के लिए स्विच करना इतना आसान है, लेकिन यह सही नहीं लगता है।स्कैला: एक बूलियन

तो स्ट्रिंग में true निकालने के लिए स्केल में एक-पंक्ति, कैनोलिक समाधान क्या है?

+0

क्यों न केवल नियमित अभिव्यक्ति का उपयोग करें? –

उत्तर

99

आह, मैं मूर्ख हूँ। जवाब myString.toBoolean है।

+2

यदि MyString शून्य है तो आपका कोड एक अपवाद फेंक देगा, मैं अगली उत्तर दृष्टिकोण को पसंद करता हूं (myString.toBoolean) .getOrElse (false) –

10

नोट: जावा में new Boolean(myString) लिखें - हमेशा Boolean.valueOf(myString) का उपयोग करें। new संस्करण का उपयोग अनावश्यक रूप से Boolean ऑब्जेक्ट बनाता है; valueOf संस्करण का उपयोग करके ऐसा नहीं होता है।

9

myString.toBoolean के साथ समस्या है, तो myString.toLowerCase बिल्कुल "true" में से एक या "false" (स्ट्रिंग में भी अतिरिक्त सफेद स्थान एक अपवाद का कारण होगा फेंक दिया करने के लिए) नहीं है कि यह एक अपवाद फेंक नहीं है।

यदि आप java.lang.Boolean.valueOf के समान व्यवहार करना चाहते हैं, तो इसे पूरी तरह से योग्यता दें, या एक अलग नाम के तहत बूलियन आयात करें, उदाहरण के लिए, import java.lang.{Boolean=>JBoolean}; JBoolean.valueOf(myString)। या अपनी खुद की विधि लिखें जो आपकी विशेष परिस्थितियों को संभालती है (उदाहरण के लिए, आप "t"true भी हो सकते हैं)।

70

कैसे इस बारे में: के रूप में एक अपवाद फेंकने के लिए विरोध

import scala.util.Try 

Try(myString.toBoolean).getOrElse(false) 

इनपुट स्ट्रिंग एक मान्य बूलियन मान false में नहीं बदलता तो दिया जाता है। यह व्यवहार Boolean.valueOf(myString) के जावा व्यवहार जैसा दिखता है।

+1

यह निश्चित रूप से सही उत्तर – Giorgio

+0

के रूप में चिह्नित होना चाहिए मुझे लगता है कि एक अपवाद वह है जो आप चाहते हैं। क्या होगा यदि उपयोगकर्ता "सत्य" या कुछ और के बजाय "1" में प्रवेश करता है? यह दृष्टिकोण अनदेखा ऐसी त्रुटि छोड़ देगा। लेकिन अब मैं कोशिश समारोह के बारे में जानता हूं, जो अच्छा है। – user42723

0

मैं आज इस के साथ मजाक कर रहा हूं, बूलियन के मूल्यों के 1/0 सेट का मानचित्रण कर रहा हूं। मैं 1.4.1 स्पार्क के लिए वापस लौटने के लिए था, और मैं अंत में इसके साथ काम कर ली:

Try(if (p(11).toString == "1" || p(11).toString == "true") true else false).getOrElse(false)) 

जहां पी (11) dataframe क्षेत्र है

मेरे पिछले संस्करण नहीं था "प्रयास करें" , यह काम करता है, इसे करने के अन्य तरीके उपलब्ध हैं ...

+1

आपको 'if''' सत्य और गलत 'के साथ' if' की आवश्यकता नहीं है क्योंकि आपके सशर्त रिटर्न 'true' या 'false' हैं। आपको बस इतना करना है कि 'कोशिश करें (हालत) .getOrElse (false) '। – jwvh

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