2013-04-18 6 views
5
के साथ एक स्ट्रिंग में एक वाक्य के पहले शब्द को बड़ा

जैसे:कई वाक्य

स्ट्रिंग एस =

के रूप में बाहर आना चाहिए "इस a.line .over है कि" "यह एक है .Line is.Over "

मैं स्ट्रिंग का उपयोग के बारे में सोचा दो बार

-first split using"." 

-second split using " " to get the first word 

-then change charAt[0].toUpper 

अब मैं कोई हूँ tokenizer किसी अन्य के लिए इनपुट के रूप में स्ट्रिंग टोकननाइज़र के आउटपुट का उपयोग कैसे करें?

भी मैं विभाजन विधि का उपयोग कर सकते हैं सरणी कुछ उत्पन्न करने के लिए मैं कोशिश की

 String a="this is.a good boy"; 
    String [] dot=a.split("\\."); 

     while(i<dot.length) 
    { 
     String [] sp=dot[i].split(" "); 
      sp[0].charAt(0).toUpperCase();// what to do with this part? 
+0

आप टी की जरूरत नहीं है वह दूसरे charAt [0] .toUpper बनाने के लिए(), एक ट्रिम पर्याप्त है अलग हो गए। – Pino

+0

इसे पहले देखें [उत्तर] (http://stackoverflow.com/questions/1892765/capitalize-first-char-of-each-word-in-a-string-java) – GrahamA

+0

@ भास्कर- सवाल थोड़ा अलग है यहाँ मैं कई वाक्य के साथ एक स्ट्रिंग है तो पहले मैं वाक्य तो विभाजित शब्द को कैपिटल .. मेरे भ्रम की स्थिति दूसरे को विभाजित करने के – kshitij

उत्तर

10

उपयोग StringBuilder, विभाजित और अन्य तार बनाने के लिए, और इतने पर की कोई जरूरत नहीं, कोड

public static void main(String... args) { 

String text = "this is a.line is. over"; 

int pos = 0; 
boolean capitalize = true; 
StringBuilder sb = new StringBuilder(text); 
while (pos < sb.length()) { 
    if (sb.charAt(pos) == '.') { 
     capitalize = true; 
    } else if (capitalize && !Character.isWhitespace(sb.charAt(pos))) { 
     sb.setCharAt(pos, Character.toUpperCase(sb.charAt(pos))); 
     capitalize = false; 
    } 
    pos++; 
} 
System.out.println(sb.toString()); 
} 
+0

वाह! यह साफ है! और विभिन्न तारों का उपयोग करने की परेशानी बचाता है धन्यवाद! – kshitij

+0

भी मुझे "।" के बाद पहले शब्द (व्हाइटस्पेस को छोड़कर) निकालने की आवश्यकता है। इसके लिए मैं इसका क्या उपयोग कर सकता हूं? – kshitij

+0

@kshitij मुझे खुशी है कि आपको यह पसंद आया। "धन्यवाद" वोट-अप में थोड़ा बेहतर है और उत्तर के रूप में चुन रहा है;) – Vitaly

0

ध्यान दें कि जावा स्ट्रिंग्स हैं अपरिवर्तनीय (नहीं परिवर्तनीय)।

यह भी ध्यान रखें कि वहाँ एक . के बाद अगर एक जगह सीधे (तब से पहली स्ट्रिंग खाली हो जाएगा) है कि sp[0].charAt(0) एक ArrayIndexOutOfBoundsException का कारण होगा।

मैं char[] उपयोग करने का सुझाव है, तो कुछ की तरह:

String a = "this is.a good boy"; 
char arr[] = a.toCharArray(); 
boolean capitalize = true; 
for (int i = 0; i < arr.length; i++) 
    if (arr[i] == '.') 
    capitalize = true; 
    else if (arr[i] != ' ' && capitalize) 
    { 
    arr[i] = Character.toUpperCase(arr[i]); 
    capitalize = false; 
    } 
a = new String(arr); 

Character.isWhitespace(arr[i])arr[i] != ' ' को प्राथमिकता दी जा सकती है।

+0

आप पहले चरित्र को जोड़ने के लिए स्ट्रिंग के प्रथम वर्ण @smttsp अपर केस – smttsp

+0

करने की आवश्यकता है? 'पूंजीकरण 'के रूप में यह' सत्य 'के रूप में शुरू होने के बाद से यह ऊपरी मामला होगा। – Dukeling

+0

ओह, आप सही कर रहे हैं। – smttsp

0

इस प्रयास करें वाक्य का पहला अक्षर कैपिटल को देखते हैं। मैंने अभी आपके कोड में थोड़ा बदलाव किया है।

public static void main(String[] args) { 
    String a = "this is.a good boy"; 
    String[] dot = a.split("\\."); 
    int i = 0; 
    String output = ""; 
    while (i < dot.length) { 
     dot[i] = String.valueOf(dot[i].charAt(0)).toUpperCase() 
       + dot[i].substring(1); 
     output = output + dot[i] + "."; 
     i++; 
    } 
    System.out.println(output); 
} 

आउटपुट:

This is.A good boy. 
+0

धन्यवाद! यह ठीक काम करता है लेकिन मुझे चिंता है कि कई रूपांतरण बड़े डेटा पर इसे धीमा कर सकते हैं। – kshitij

+0

@ क्षितिज मुझे लगता है कि अगर आप आउटपुट चर के लिए स्ट्रिंग के बजाय स्ट्रिंगबिल्डर का उपयोग करते हैं तो यह सबसे अच्छा समाधान है। –

2

बंटवारे और स्प्लिसिंग साथ गड़बड़ करने के लिए कोई ज़रूरत नहीं है, तो आप इन-जगह एक चरित्र सरणी पर काम कर सकते हैं:

String s = "this is a.line is .over "; 

char[] cs = s.toCharArray(); 

// make sure to capitalise the first letter in the string 
capitaliseNextLetter(cs, 0); 

for (int i = 0; i < cs.length; i++) { 
    // look for a period 
    if (cs[i] == '.') { 
     // capitalise the first letter after the period 
     i = capitaliseNextLetter(cs, i); 
     // we're assigning to i to skip the characters that 
     // `capitaliseNextLetter()` already looked at. 
    } 
} 

System.out.println(new String(cs)); 

// This will capitalise the first letter in the array `cs` found after 
// the index `i` 
private static int capitaliseNextLetter(char[] cs, int i) { 
    for (; i < cs.length; i++) { 
     // This will skip any non-letter after the space. Adjust the test 
     // as desired 
     if (Character.isAlphabetic(cs[i])) { 
      cs[i] = Character.toUpperCase(cs[i]); 
      return i; 
     } 
    } 
    return cs.length; 
} 
संबंधित मुद्दे