suroh
suroh

Reputation: 917

Issue with substring method

I wrote a little program that prompts a user to enter their first middle and last name I then attempt to locate each white space and store the name that comes after the whitespace into a new String variable.

Problem: I want to locate the white spaces before each part of the name so that I can take each relative name and store it in a new String variable but i'm not sure where I'm going wrong.

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


  } 

}

The output I'm getting looks like this

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

Last Name, First Name, Middle Name: SmithAdam ThomasSmith

Any suggestions as to how to fix this?

Upvotes: 0

Views: 82

Answers (3)

Ellis
Ellis

Reputation: 567

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]);

Try this instead. It uses String.split() to split the name on a space (\\s+, a regex) and returns the values as an array. The names could also be assigned to a variable if you choose.

Upvotes: 1

Vikrant Kashyap
Vikrant Kashyap

Reputation: 6846

Better to use split(" ") function... It will change you string to an string array. Eg:-

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

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

Upvotes: 0

Tom C
Tom C

Reputation: 814

You can try the following code, just by splitting the 'name' variable on each space into an String[] Then by getting each value from the array and assigning to the value you wish.

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

Upvotes: 0

Related Questions