2017-07-08 5 views
0

Frage:String substring Fehler

Input:-gandhi      output:- Gandhi 
Input:-mahatma gandhi    output:- M. Gandhi 
Input:-Mohndas Karamchand ganDhi output:- M. K. Gandhi 

Antwort:

public class Chef_NITIKA { 

    static Scanner scan=new Scanner(System.in); 

    public static void main(String[] args) { 
     String name= myString(); 
     System.out.println("nam is :"+name); 
     mySformatter(name); 

    } 

    private static void mySformatter(String name) { 
      int count=0; 
      for(char c:name.toCharArray()){ 
       if(c==' '){ 
        count+=1; 
       } 
      } 
      System.out.println(count+" blank spaces"); 
      if(count==0){ 
       char ch=name.charAt(0); 
       name=Character.toUpperCase(ch)+name.substring(1); 
       System.out.println("nam is :"+name); 
      } 
      else if(count==1){ 
       char ch=name.charAt(0); 
      name= name.replace(' ', '.'); 
      String subname=name.substring(name.indexOf(".")+1); 
      char c=subname.charAt(0); 
      subname=Character.toUpperCase(c)+subname.substring(1); 
      name=Character.toUpperCase(ch)+"."+subname; 
       System.out.println("nam is :"+name); 
      } 
      else if(count==2){ 
       char ch=name.charAt(0); 
      // name= name.replace(' ', '.'); 
      String subname=name.substring(name.indexOf(" ")+1); 
      System.out.println(subname); 
      String subsubname=subname.substring(name.indexOf(" ")); 
      System.out.println(subsubname); 
      char c=subname.charAt(0); 
      char c1=subsubname.charAt(0); 
      subname=Character.toUpperCase(c)+subname.substring(1); 
      name = Character.toUpperCase(ch)+"."+Character.toUpperCase(c)+"."+Character.toUpperCase(c1)+subsubname.substring(1); 
       System.out.println("nam is :"+name); 
      } 
    } 

    private static String myString() { 
     System.out.println("enter the string"); 
     String s=scan.nextLine(); 
     StringBuffer name=new StringBuffer(); 
    // name.append(s); 
     return s; 
    } 
} 

Ich bin nicht die gewünschte Ausgabe bekommen, wenn i "abc cde fgh" eingeben, bekomme ich die Ausgabe als AC.fgh

Gibt es einen effizienten Weg, um dieses Problem zu lösen?

unerwünschten Ausgang: -

enter the string 
iam writing onStack 
nam is :iam writing onStack 
2 blank spaces 
writing onStack 
ing onStack 
nam is :I.W.Ing onStack 

Ich möchte die Ausgabe als IWOnStack

+1

Was ist die gewünschte Ausgabe für "abc cde fgh"? – khelwood

Antwort

2

aufgeteilt einfach den Namen in Komponenten und bilden dann die Abkürzungen Sie wollen:

public static String getName(String input) { 
    String[] names = input.split("\\s+"); 
    String output = ""; 

    // replace 1st through second to last names with capitalized 1st letter 
    for (int i=names.length; i > 1; --i) { 
     output += names[names.length - i].substring(0, 1).toUpperCase() + ". "; 
    } 

    // append full last name, first letter capitalized, rest lower case 
    output += names[names.length - 1].substring(0, 1).toUpperCase() 
      + names[names.length - 1].substring(1).toLowerCase(); 

    return output; 
} 

public static void main(String[] args) { 
    System.out.println(getName("gandhi")); 
    System.out.println(getName("mahatma gandhi")); 
    System.out.println(getName("Mohndas Karamchand ganDhi")); 
} 

Ausgang:

Gandhi 
M. Gandhi 
M. K. Gandhi 

Demo hier:

Rextester

Update:

Hier ist ein link to a demo, wo ich Ihren ursprünglichen Code, zumindest teilweise korrigiert. Das Problem war die folgende Zeile ein:

String subsubname = subname.substring(name.indexOf(" ")); 

, das ich dies geändert:

String subsubname = subname.substring(subname.indexOf(" ") + 1); 

Sie wurden nicht korrekt das erste Zeichen des dritten Teils des Namens identifiziert. Das heißt, Ihr aktueller Ansatz ist ausführlich, schwer zu lesen und unflexibel. In der Praxis würden Sie wahrscheinlich ein schlankeres Konzept für dieses Problem verwenden.

+0

Ich kompilierte den Code von Ihnen und bekam die richtige Ausgabe, aber können Sie den Fehler in meinem Code finden? Hauptsächlich, wenn der Count 2 –

+0

ya ist, habe ich die Ausgabe gepostet, die ich bekomme –

+0

@RushabhOswal Ich teste jetzt Ihren Code, gib mir ein paar Minuten. –

1
/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package stack; 

import java.util.Scanner; 
import java.util.StringTokenizer; 

/** 
* 
* @author xxz 
*/ 
public class NAmes { 
    public static void main(String[] args) { 
     Scanner sc = new Scanner(System.in); 
     final String name = sc.nextLine(); 
     System.out.println(formatedString(name)); 
     sc.close(); 
    } 

    private static String formatedString(String name) { 
     if(name!=null && name.length()!=0){ 
      final StringTokenizer tokenizer = new StringTokenizer(name, " "); 
      StringBuilder result = new StringBuilder(""); 
       while(tokenizer.hasMoreTokens()){ 
       StringBuilder currentToken =new StringBuilder(tokenizer.nextToken()); 

       if(!tokenizer.hasMoreTokens()){ 
        result.append(currentToken.toString().toUpperCase()); 
       } else{ 
        result.append(currentToken.toString().toUpperCase().charAt(0)+". "); 
       } 
      } 
      return result.toString(); 
     } 
     return ""; 
    } 
} 
+0

Ich möchte wissen, was in meinem Code falsch ist, wenn Counter == 2 –

0
@Rushabh Oswal you can get desired result by below method 

    private static void mySformatter(String name) { 
      String [] tempArray=name.split(" "); 
      StringBuilder outputStr=new StringBuilder(); 
      int len=tempArray.length; 
      for(int i=0;i<len;i++){ 
       String str=tempArray[i]; 
       if (str.isEmpty()) 
        continue; 

       if(i==len-1) 
       outputStr.append(Character.toUpperCase(str.charAt(0))).append(str.substring(1).toLowerCase()); 
      else 
       outputStr.append(Character.toUpperCase(str.charAt(0))).append(". "); 

      System.out.println(outputStr.toString()); 
     }