2012-09-14 11 views
6

जावा 1.6 में:String.Format() इस कोड को ठीक काम करता है फेंकता FormatFlagsConversionMismatchException

java.util.FormatFlagsConversionMismatchException: Mismatched Convertor =s, Flags= # 
     at java.util.Formatter$Transformer.transformFromString(Formatter.java:1020) 
     at java.util.Formatter$Transformer.transform(Formatter.java:861) 
     at java.util.Formatter.format(Formatter.java:565) 
     at java.util.Formatter.format(Formatter.java:509) 
     at java.lang.String.format(String.java:1961) 

कोई समाधान:

public static String padLeft(String s, int n) 
{ 
    if (n <= 0) 
     return s; 
    int noOfSpaces = n * 2; 
    String output; 
    noOfSpaces = s.length() + noOfSpaces; 
    output = String.format("%1$#" + noOfSpaces + "s", s); 
    return output; 
} 

लेकिन नए संस्करण (और कुछ अन्य वीएम कार्यान्वयन) इस Exception फेंक?

+0

जावा के कौन से संस्करण यह काम करते हैं, और जावा के कौन से संस्करण विफल होते हैं? क्या आप प्रत्येक संस्करण पर एक ही डेटा के साथ परीक्षण कर रहे हैं (यानी यह संभव है कि जावा संस्करण वास्तव में अप्रासंगिक है और यह वास्तव में कुछ इनपुट है जो समस्या उत्पन्न करते हैं?) –

+0

हाँ। दोनों मामलों में यह वही डेटा इनपुट है। ओरेकल जेडीके में हर समय काम करता है लेकिन आईबीएम जेडीके में विफल रहता है। दूसरों ने एक ही कारण की सूचना दी है - https://issues.apache.org/jira/browse/SSHD-104 – user170008

+0

jre-1.7.0_06 का उपयोग करके, काम नहीं करता है। 1.6.0_30 के साथ काम करता है – Achow

उत्तर

2

आपने एक कामकाज के लिए कहा; बस StringBuilder का उपयोग करें:

public static String padLeft(String s, int n) { 
    if (n <= 0) 
     return s; 
    int noOfSpaces = n * 2; 
    StringBuilder output = new StringBuilder(s.length() + noOfSpaces); 
    while (noOfSpaces > 0) { 
     output.append(" "); 
     noOfSpaces--; 
    } 
    output.append(s); 
    return output.toString(); 
} 
0

चूंकि आप प्रारूप स्ट्रिंग में # ध्वज का उपयोग कर रहे हैं, तो आपको Formattable को एक तर्क (doc) के रूप में पास करना चाहिए।

कोई काम आसपास है?

प्रारूप स्ट्रिंग में # का उपयोग न करें?

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