2017-07-08 38 views
0

問:字符串的子串錯誤

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

答:

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; 
    } 
} 

我沒有得到期望的輸出當我鍵入 「ABC CDE FGH」 我得到的輸出AC.fgh

有沒有什麼有效的方法來解決這個問題?

不需要輸出: -

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

我想要的輸出IWOnStack

+1

什麼是 「ABC CDE FGH」 所需的輸出? – khelwood

回答

2

只是分裂名字變成組件,然後形成你想要的縮寫:

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")); 
} 

輸出:

Gandhi 
M. Gandhi 
M. K. Gandhi 

演示在這裏:

Rextester

更新:

這裏是一個link to a demo,我糾正了原代碼,至少部分。問題是以下行:

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

,我改變了這個:

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

你沒有正確識別名稱的第三部分的第一個字符。這就是說,你目前的做法是冗長的,難以閱讀和不靈活。在實踐中,你可能會想要對這個問題採用更精簡的方法。

+0

我編譯了你的代碼,並得到了正確的utput,但你能找到我的代碼中的錯誤?主要是當計數是2 –

+0

雅,我已經發布了我得到的輸出 –

+0

@RushabhOswal我正在測試你的代碼,給我幾分鐘。 –

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

我想知道我的代碼有什麼問題,當計數器== 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()); 
     }