स्काला: एक स्ट्रिंग का एक बूलियन में सुरुचिपूर्ण रूपांतरण


84

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

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


क्यों नहीं बस एक नियमित अभिव्यक्ति का उपयोग करें?
केविन मेरेडिथ

3
यह बिल्कुल आसान नहीं लगता।
Jaime Hablutzel

जवाबों:


144

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


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

2
Try(myString.toBoolean).getOrElse(false)अपवाद को फेंकने और पकड़ने के काम से गुजरेगा। Option(myString).exists(_.toBoolean)उस अतिरिक्त प्रयास से बचता है।
sfosdal

1
का उपयोग करना Try(myString.toBoolean).getOrElse(false)अच्छा है। गैर-मिलान स्ट्रिंग को साफ तरीके से संभालता है।
एनकेएम

110

इस बारे में कैसा है:

import scala.util.Try

Try(myString.toBoolean).getOrElse(false)

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


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

16

Scala 2.13शुरू किया गया String::toBooleanOption, जो संयुक्त रूप Option::getOrElseसे निकालने के लिए एक सुरक्षित तरीका प्रदान करता Booleanहै String:

"true".toBooleanOption.getOrElse(false)  // true
"false".toBooleanOption.getOrElse(false) // false
"oups".toBooleanOption.getOrElse(false)  // false

11

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


8

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

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


1
यह सच नहीं है (अब)। toLowerCase is done by toBoolean`
6

1

मैं आज इसके साथ मज़े कर रहा हूं, मूल्यों के 1/0 सेट को बूलियन पर मैप करना। मुझे वापस स्पार्क 1.4.1 पर वापस जाना पड़ा, और मुझे आखिरकार इसके साथ काम करना पड़ा:

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

जहाँ p (11) डेटाफ़्रेम फ़ील्ड है

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


2
आप की जरूरत नहीं है ifके साथ true else falseहै क्योंकि आपके सशर्त रिटर्न trueया false। आप सभी की जरूरत है Try(condition).getOrElse(false)
jwvh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.