2012-01-25 6 views
5

का उपयोग करने की अपेक्षा करता हूं, मैं यह जांचने का प्रयास कर रहा हूं कि कोई स्ट्रिंग (फ़िल्टर) किसी अन्य स्ट्रिंग (स्वरूपित राशि) में निहित है यानी स्वरूपित राशि का एक सबस्ट्रिंग फ़िल्टर करें।बराबर() और indexOf() काम नहीं कर रहा है क्योंकि मैं नंबरफॉर्मैट

मैं इसे काम नहीं कर सका इसलिए मैंने केवल "इंडेक्सऑफ()" के बजाय "बराबर()" का उपयोग करने के लिए कोड को बदल दिया, पूरी तरह से परीक्षण को सरल बनाने के लिए। बराबर विधि काम नहीं कर रही है क्योंकि मैं या तो उम्मीद करता हूं।

import java.math.BigDecimal; 
import java.text.NumberFormat; 
import java.util.Locale; 


public class utils 
{ 

    public utils() 
    { 
    } 

    public static void main(String[] args) throws Exception 
    { 
     String filter = "333 333,44"; 
     Number amount = new BigDecimal(333333.44); 

     NumberFormat nf = NumberFormat.getNumberInstance(Locale.FRANCE); 
     nf.setMinimumFractionDigits(2); 

     String formattedAmount = nf.format(amount); 

     if (formattedAmount.equals(filter)) 
     { 
      System.out.println("Working"); 
      } 
    } 
} 

किसी भी विचार क्यों यह तो बयान में प्रवेश नहीं कर रहा है:

यहाँ एक डमी स्क्रिप्ट मैं लिखा replicates कि मैं क्या करने की कोशिश कर रहा हूँ?

धन्यवाद

+2

क्या आपने वास्तव में स्वरूपितअमाउंट चर मुद्रित करने की कोशिश की है और देखें कि आपको क्या मिलता है? – Tudor

+0

मेरे पास ट्यूडर है, यह 333 333,44 प्रिंट करता है जैसा कि मैं उम्मीद करता हूं। –

+0

@ थॉमस बकली: जैसा कि मुझे संदेह था, चौथा चरित्र वास्तव में अंतरिक्ष नहीं है, लेकिन कुछ और। – Tudor

उत्तर

10

एक साधारण println सच्चाई का पता चलता है: फ्रांस स्थान में हज़ार विभाजक है नहीं अंतरिक्ष CHARACTER:

System.out.println((int)formattedAmount.charAt(3) + " " + (int)filter.charAt(3)); 

प्रिंटों:

160 32 

इसलिए, अपने दो तार बराबर नहीं हैं।

char s = 160; 
String filter = "333" + s + "333,44"; 
+1

यह क्या है? यह निश्चित रूप से एक जगह की तरह दिखता है। –

+0

यह निश्चित रूप से एक जगह की तरह दिखता था। यद्यपि यदि आप स्ट्रिंग बाइट्स की जांच करते हैं तो आप देखेंगे कि यह सामान्य स्थान के समान चरित्र नहीं है। –

+2

@ श्रेडर: 160 गैर-ब्रेकिंग स्पेस है, 32 सामान्य स्थान है, इसके अनुसार: http://htmlhelp.com/reference/charset/iso160-191.html – Tudor

2

स्ट्रिंग # कोषगत के बराबर होती है दो तार तुलना करती है। तो बराबर वापस लौटने के बराबर दोनों तारों में एक ही सामग्री होनी चाहिए। बस जांचें कि दो तारों के अलग-अलग अक्षर हैं: स्वरूपित राशि = 33 33 33 c2 a0 33 33 33 2 सी 34 34 बनाम फिल्टर = 33 33 33 33 33 33 2 सी 34 34. 0x20 मानक स्थान है और 0xc2a0 शायद कोई ब्रेक-अंतरिक्ष। कोई आश्चर्य झूठी वापसी के बराबर नहीं है - तारों के पहले तीन '3 के बाद अलग-अलग अक्षर होते हैं।

0

nf.format 3 के समूहों के बीच एक नॉन-ब्रेकिंग स्पेस (चरित्र कोड 160) outputting है की कोशिश करो। आपके फ़िल्टर में एक नियमित स्थान है (वर्ण कोड 32) ताकि तार मेल नहीं खाते।

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