2013-04-15 53 views
-3

當用戶輸入多個空格時,我的程序不能正確打印用戶名。例如,如果用戶輸入他們的名字後加2個空格,然後輸入他們的姓氏,我的程序假定這些額外的空格是中間名,並輸入中間名作爲空格,最後一個名稱作爲第二個字符串輸入,儘管只輸入了兩個字符串。我怎樣才能改善這個問題,以便用戶輸入的額外空間不被視爲中間名或者姓氏?解析名稱沒有空格?

public static void main(String[] args) 
{ 
    Scanner sc = new Scanner(System.in); 

    System.out.println("Welcome to the name parser.\n"); 
    System.out.print("Enter a name: "); 
    String name = sc.nextLine(); 

    name = name.trim(); 

    int startSpace = name.indexOf(" "); 
    int endSpace = name.indexOflast(" "); 
    String firstName = ""; 
    String middleName = ""; 
    String lastName = ""; 

    if(startSpace >= 0) 
    { 
     firstName = name.substring(0, startSpace); 
     if(endSpace > startSpace) 
     { 
      middleName = name.substring(startSpace + 1, endSpace); 
     } 
     lastName = name.substring(endSpace + 1, name.length()); 
    } 
    System.out.println("First Name: " + firstName); 
    System.out.println("Middle Name: " + middleName); 
    System.out.println("Last Name: " + lastName); 
} 

輸出:喬            馬克

First name: joe 
Middle name: // This shouldn't print but because the user enter extra spaces after first name the spaces becomes the middle name. 
Last name: mark 
+6

爲什麼今天第二次問同樣的問題? – piokuc

+0

其不一樣 – user2264244

+0

你會澄清嗎?我無法看到任何重大差異。 –

回答

3

試試這個

// replaceAll needs regex so "\\s+" (for whitespaces) 
// s+ look for one or more whitespaces 
// replaceAll will replace those whitespaces with single whitespace. 
// trim will remove leading and trailing whitespaces 

name = name.trim().replaceAll("\\s+", " "); 

1. Java Regex

2. replaceAll API

+4

你應該解釋這是什麼。 –

+0

@MattBall就是這麼做的。不管怎麼說,還是要謝謝你。 – Smit