2016-02-26 42 views
0

我寫了一個小程序,提示用戶輸入他們的第一個中間名和最後一個名字,然後嘗試找到每個空格並將空白後面的名稱存儲到新的String變量中。問題與子字符串方法

問題:我想在名稱的每個部分之前找到空格,以便我可以取每個相對名稱並將其存儲在一個新的String變量中,但我不確定哪裏出錯。

import java.util.Scanner; 
public class Example 
{ 
    public static void main(String[] args) 
    {  

     Scanner input = new Scanner(System.in); 
     String name = "", 
       firstName = "", 
       middleName = "", 
       lastName = ""; 



     boolean isName = false; 

     while(!isName) 
     { 
      System.out.print("\nEnter your name as 'First Middle Last': "); 
      name = input.nextLine(); 

      if(name.length() < 0) 
      { 
      System.out.print("\nEnter your name as 'First Middle Last': "); 
      name = input.nextLine(); 
      System.out.print("Invalid input"); 
      } 

      else isName = true;    
     } 


     for(int j = 0; j < name.length(); j++) 
     { 
      if(name.charAt(j) == ' ') 
      { 

       firstName = name.substring(0, j); // Start at 0 end at first white space 
       middleName = name.substring(j + 1, name.length()); 
       lastName = name.substring(j + 1, name.length()); 

      } 
     } 

     System.out.println("\nLast Name, First Name, Middle Name: " + lastName + firstName + middleName); 


    } 

} 

我得到這個樣子的

Enter your name as 'First Middle Last': Adam Thomas Smith 

Last Name, First Name, Middle Name: SmithAdam ThomasSmith 

任何建議,如何解決這個問題的輸出?

+0

您的循環沒有多大意義。嘗試使用string.split(http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String-)來拆分空格字符。還要注意名字中帶有空格的名字或姓氏。 – Resorath

+2

@Resorath這是一個Java問題。您正在鏈接到.NET文檔。 –

+1

@StefanDollase oops! http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#split-java.lang.String- – Resorath

回答

1
name = name.trim(); // To avoid suprises, as Pshemo suggested. 
String[] splitName = name.split("\\s+"); 

System.out.println("\nLast Name, First Name, Middle Name: " 
    + splitName[2] + " " + splitName[0] + " " + splitName[1]); 

試試這個。它使用String.split()在空間上分割名稱(\\s+,正則表達式)並將值作爲數組返回。如果您選擇,名稱也可以分配給一個變量。

+2

我可能會在'split'前添加'trim()'以避免意外。 – Pshemo

0

只需將每個空間上的'name'變量分割成一個String [],就可以嘗試下面的代碼,然後從數組中獲取每個值並賦值給您希望的值。

String[] str = name.split(" "); 
firstName = str[0]; 
middleName = str[1]; 
lastName = str[2]; 
0

更好的使用分割(「」)功能......它會改變你的字符串爲一個字符串數組。例如: -

  String names = "Madan mohan malviya"; 
     String arr[] = name.split(" "); 
     for(name :names){ 

       System.out.println(name); // print each string content 
      }