2016-02-26 41 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 
      }