2014-02-24 59 views
1

我正在編寫一個程序,它會給出用戶輸入的名稱(字符串)的縮寫。 我想使用Space function,同時寫入名稱作爲算法的基礎。 對於如:名稱上的Java程序名稱縮寫

<Firstname><space><Lastname> 

取炭曾經在for循環,並檢查是否存在之間的空間,如果有,將打印只是之前的性格特徵。 有人能告訴我如何實現這個? 我想這個,但得到一個錯誤。

任何幫助都是深刻appreaciated .. P.S-我是新來的Java和發現它很intresting。很抱歉,如果有在編碼

public class Initials { 
    public static void main(String[] args) { 
     String name = new String(); 
     System.out.println("Enter your name: "); 
     Scanner input = new Scanner(System.in); 
     name = input.nextLine(); 

     System.out.println("You entered : " + name); 
     String temp = new String(name.toUpperCase()); 

     System.out.println(temp); 

     char c = name.charAt(0); 
     System.out.println(c); 

     for (int i = 1; i < name.length(); i++) { 
      char c = name.charAt(i); 

      if (c == '') { 
       System.out.println(name.charAt(i - 1)); 
      } 

     } 
    } 
} 

編輯大的紕漏: 好的終於得償所願。該算法是很多模糊的,但它的工作,並會嘗試下一次與子字符串做..

for (int i = 1; i < temp.length(); i++) { 
    char c1 = temp.charAt(i); 

    if (c1 == ' ') { 
     System.out.print(temp.charAt(i + 1)); 
     System.out.print("."); 
    } 
} 

非常感謝球員:)

+0

你能描述一下你得到的錯誤嗎? – PakkuDon

+0

程序沒有編譯錯誤是 if(c =='') - 在這裏它沒有把''作爲有效的語法 – user3291928

+1

如果你想測試一個空格你應該寫'c ==''' –

回答

0

我會做這樣的事情: 記住,你只需要inicial字符

public staticvoid main (String[] args){ 
    String name; 
    System.out.println("Enter your complete name"); 
    Scanner input = new Scanner(System.in); 
    name = input.nextLine(); 
    System.out.println("Your name is: "+name); 
    name=" "+name; 
    //spacebar before string starts to check the initials 
    String ini; 
    // we use ini to return the output 
    for (int i=0; i<name.length(); i++){ 
     // sorry about the 3x&&, dont remember the use of trim, but you 
     // can check " your name complete" if " y"==true y is what you want 
     if (name.charAt(i)==" " && i+1 < name.length() && name.charAt(i+1)!=" "){ 
     //if i+1==name.length() you will have an indexboundofexception 
     //add the initials 
     ini+=name.charAt(i+1); 
     } 
    } 
    //after getting "ync" => return "YNC" 
    return ini.toUpperCase(); 
} 
3

這對我的作品

public static void main(String[] args) { 
    Pattern p = Pattern.compile("((^|)[A-Za-z])"); 
    Matcher m = p.matcher("Some Persons Name"); 
    String initials = ""; 
    while (m.find()) { 
     initials += m.group().trim(); 
    } 
    System.out.println(initials.toUpperCase()); 
} 

輸出:

run: 
SPN 
BUILD SUCCESSFUL (total time: 0 seconds) 
+0

謝謝。好的解決方案 –

0

如果你關心性能(將運行這個方法很多次),額外的charAt(I + 1)不需要和成本相對較高。 另外,它會打破文字雙空格將崩潰的名稱以空間結束。

這是一個更安全,更快的版本:

public String getInitials(String name) { 
     StringBuilder initials = new StringBuilder(); 
     boolean addNext = true; 
     if (name != null) { 
      for (int i = 0; i < name.length(); i++) { 
       char c = name.charAt(i); 
       if (c == ' ' || c == '-' || c == '.') { 
        addNext = true; 
       } else if (addNext) { 
        initials.append(c); 
        addNext = false; 
       } 
      } 
     } 
     return initials.toString(); 
    } 
0

只需使用正則表達式替換未跟隨一個空白的任何字符,刪除所有剩餘的空白,並最終使其大寫:

" Foo Bar moo ".replaceAll("([^\\s])[^\\s]+", "$1").replaceAll("\\s", "").toUpperCase(); 

=>FBM