2012-05-10 16 views
6

में चार तुलना मैं इस तरह कुछ करना चाहता हूँ:ईएल अभिव्यक्ति

<c:if test="${somestring.charAt(0)=='1'}"> 
tadaaaam 
</c:if> 

जब somestring "11011" है, लेकिन यह काम नहीं करता। मैं इसे

${somestring.charAt(0)} 

और यह '1' के साथ प्रिंट कर सकता है लेकिन उपरोक्त तुलना विफल हो जाती है। निम्नलिखित तुलना:

if(somestring.charAt(0)=='1') 

Worx (हालत सच है) शुद्ध जावा में।

कोई विचार?

+0

बिल्ला 7 पर पुन: पेश नहीं कर सकते हो सकता है कि आप हमें वास्तविक कोड वह काम नहीं करता दिखा सकता है? – Affe

+0

मैं बिलाव 7. पर चला हो सकता है कि आप अपने प्रोजेक्ट को JSTL पुस्तकालय जोड़ने नहीं –

उत्तर

8

ईएल चार के साथ परेशानी है लगता है। यहां एकमात्र तरीका है जिससे मैं इसे काम कर सकता हूं।

<c:if test="${somestring.charAt(0) == '1'.charAt(0)}" > 
    tadaaaam 
</c:if> 
+0

धन्यवाद, इसे उस तरह से काम करता है :) मुझे नहीं पता था कि '1' इस मामले में स्ट्रिंग है। –

7

व्यवहार बिल्कुल वही है जैसा कि ईएल विनिर्देशन द्वारा आवश्यक है। यदि आप ईएल विनिर्देश के संस्करण 2.2 लेते हैं, तो आपको अनुभाग 1.8.2 को देखना होगा जो '==' ऑपरेटर के लिए नियम प्रदान करता है।

इस मामले में ऑपरेंड somestring.charAt(0) हैं जो एक char और '1' जो एक String (नहीं एक वर्ण) के बाद से तार ईएल में या तो एकल या डबल उद्धरण से सीमांकित किया जा सकता है।

को देखते हुए हम == स्ट्रिंग, तो 1.8.2 के छठे गोली लागू होता है और दोनों लंबे समय मूल्यों के लिए मजबूर कर रहे हैं चरित्र है। चरित्र को 49 (एएससीआईआई कोड 1) के लिए मजबूर किया जाएगा और 1 को 1 तक ले जाया जाएगा। ये परिणाम उतने बराबर नहीं हैं जितना आप देखते हैं।

मैं सराहना करता हूं कि यह वही नहीं है जो आप उम्मीद करेंगे लेकिन यह व्यवहार है जो विनिर्देशन द्वारा आवश्यक है और इस तथ्य से ट्रिगर किया गया है कि ईएल डिलीमिट स्ट्रिंग्स में सिंगल कोट्स वर्ण नहीं हैं।

+0

आपके उत्तर के लिए धन्यवाद। वास्तव में '1' स्ट्रिंग के रूप में है। मैं गलत सोच रहा था कि यह एक चरित्र है, मुझे और विनिर्देश पढ़ना है :) –

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