sumu00
sumu00

Reputation: 49

How to search for space in a Java String?

I am quite new to programming and I am writing this code to count a string (length) to a point when I encounter a space. The aim is - when the user enters his/her name AND surname, the program should split the name from surname and count how many letters/characters were there in the name (and surname).

My code doesn't seem to reach/execute the "if-statement", if I enter two strings (name & surname) separated by space (output: Your name is: (empty space) and it has 0 letters. However, if I enter only one string, the if-statement, it gets executed.

What I am doing wrong?

My example code:

public class Initials {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in); 
    String nameAndSurname, nameOnly;
    int c = 0, count = 0;
    System.out.println("Enter your full name please:");
    nameAndSurname = scan.nextLine();
    int space = nameAndSurname.indexOf(' ');
    for(int x = 0; x<=nameAndSurname.length()-1; x++) {
        c++;
        if(nameAndSurname.indexOf(x) == space) //if there is a space
        { 
            count = c; //how many characters/letters was there before space
            System.out.println(count);
        } 
    }
    nameOnly = nameAndSurname.substring(0, count);
    System.out.println("Your name is: " + nameOnly.toUpperCase() + " and it has " + count + " letters");
    scan.close();
}

Upvotes: 0

Views: 971

Answers (3)

Victor Tripeno
Victor Tripeno

Reputation: 169

You can verify if your string has space before start the loop, something like this:

public class Initials {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in); 
    String nameAndSurname, nameOnly;
    int c = 0, count = 0;
    System.out.println("Enter your full name please:");
    nameAndSurname = scan.nextLine();
    int space = nameAndSurname.indexOf(' ');
    if(space == -1) {
          System.out.println("Your name has no spaces");
    } else {
    for(int x = 0; x<nameAndSurname.length(); x++) {
        c++;
        if(nameAndSurname.indexOf(x) == space) //if there is a space
        { 
            count = c; //how many characters/letters was there before space
            System.out.println(count);
        } 
    }
    nameOnly = nameAndSurname.substring(0, count);
    System.out.println("Your name is: " + nameOnly.toUpperCase() + " and it has " + count + " letters");

}
scan.close();

}

Upvotes: 0

dahui
dahui

Reputation: 2166

 if(nameAndSurname.indexOf(x) == space)

This line isn't doing what you think it is doing.

It's getting a char (character) from the index of x, and comparing it to the value of space. Space is an integer, so you are comparing the character at position x to the integer position of the first space. In this case, the letter at position x is cast into an integer, and then compared to the actual number value of the first space!

To fix the program, replace your entire if statement with this.

if (nameAndSurname.charAt(x) == ' ') //if there is a space
{
    count = c-1; //how many characters/letters was there before space
    System.out.println(count);
}

Extra:

Since the way you've solved this problem is a bit overkill, I've posted another solution below which solves it in a way that is easier to read. Also it won't break if you put in more or less than 1 space.

Scanner scan = new Scanner(System.in);
String nameAndSurname;
System.out.println("Enter your full name please:");
nameAndSurname = scan.nextLine().trim();
int indexOfFirstSpace = nameAndSurname.indexOf(' ');
if (indexOfFirstSpace > -1) {
    String firstName = nameAndSurname.substring(0, indexOfFirstSpace);
    System.out.println("Your first name is " + firstName.toUpperCase());
    System.out.println("It is " + firstName.length() + " characters long.");
}

Upvotes: 1

Courtney Maroney
Courtney Maroney

Reputation: 90

Why bother with all that code? Just skip the for-loop, have an

if (space != -1) nameOnly = nameAndSurname.substring(0,space);

and if you really want to know the amount of letters, it is space+1

No need for all that complicated stuff.

Upvotes: 1

Related Questions