2010-12-01 101 views
15

मैं उपयोगकर्ता इनपुट को पार्स/मान्य करने के लिए DecimalFormat का उपयोग कर रहा हूं। दुर्भाग्यवश यह पार्सिंग के दौरान पात्रों को प्रत्यय के रूप में अनुमति देता है।DecimalFormat वर्णों को प्रत्यय के रूप में क्यों अनुमति देता है?

उदाहरण कोड:

try { 
    final NumberFormat numberFormat = new DecimalFormat(); 
    System.out.println(numberFormat.parse("12abc")); 
    System.out.println(numberFormat.parse("abc12")); 
} catch (final ParseException e) { 
    System.out.println("parse exception"); 
} 

परिणाम:

12 
parse exception 

मैं वास्तव में उन दोनों के लिए एक पार्स अपवाद उम्मीद करेंगे। जैसे इनपुट की अनुमति न देने के लिए मैं DecimalFormat कैसे बता सकता हूं?

उत्तर

16
NumberFormat.parse के प्रलेखन से

: दिए गए स्ट्रिंग एक नंबर का उत्पादन करने की शुरुआत से

पार्स पाठ। विधि दिए गए स्ट्रिंग के पूरे पाठ का उपयोग नहीं कर सकती है।

यहां एक उदाहरण है जो आपको यह सुनिश्चित करना चाहिए कि पूरी स्ट्रिंग को कैसे माना जाता है।

import java.text.*; 

public class Test { 
    public static void main(String[] args) { 
     System.out.println(parseCompleteString("12")); 
     System.out.println(parseCompleteString("12abc")); 
     System.out.println(parseCompleteString("abc12")); 
    } 

    public static Number parseCompleteString(String input) { 
     ParsePosition pp = new ParsePosition(0); 
     NumberFormat numberFormat = new DecimalFormat(); 
     Number result = numberFormat.parse(input, pp); 
     return pp.getIndex() == input.length() ? result : null; 
    } 
} 

आउटपुट:

12 
null 
null 
2

विधि के parse(String, ParsePosition) अधिभार का प्रयोग करें, और पार्स करने के बाद ParsePosition की .getIndex() की जाँच करें, अगर यह इनपुट की लंबाई से मेल खाता है देखने के लिए।

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