Print index position of letter from sentence using JOptionPane

Tags: ,



I need to ask the user to input a sentence and then a letter. The program should then print out how many letters the sentence contains. Also the index position of the specified character that the user inputted. My problem is that I don’t know how to find the position of that character.

NOTE: I have searched the web for answer.

import javax.swing.*;

public class Main {
    public static void main(String[] args) {

        String sentence;                //Store the users senctence
        String sentence2;               //Stores the letter that the user wants to count.
        int index;
        sentence = JOptionPane.showInputDialog("Write a sentence");
        sentence2 = JOptionPane.showInputDialog("Write a letter");

        int sLenght = 0;
        int countCha = sentence2.indexOf(sentence2);

        if (sentence == null || sentence.equals(""))
            JOptionPane.showMessageDialog(null, "You need to input a sentence to continue");
        else {

            for (int i = 0; i < sentence.length(); i++) {
                if (sentence.charAt(i) != 1)
                    sLenght++;
            }

            JOptionPane.showMessageDialog(null, "The sentence contains" + " " + sLenght +
                    " " + "characters" + "n" + "Tecknet" + " " + sentence2 + " " + "occurs" + sentence.indexOf(sentence2) + " " + "times");
        }
    }
}

Answer

If you want to show just the first index where the character is found, you can use String#indexOf(int ch). If you want to display all the positions where the letter occurs in the sentence, you can use String#indexOf(String str, int fromIndex).

Demo:

public class Main {
    public static void main(String[] args) {
        String sentence = "Hello world!";
        char ch = 'l';
        int index = sentence.indexOf(ch);
        if (index != -1) {
            System.out.println("The first occurance of '" + ch + "' is at " + index);
        } else {
            System.out.println("The letter, '" + ch + "'does not exist in the sentence");
        }

        // All positions
        System.out.println("All positions: ");
        int fromIndex = 0, count = 0;
        for (int i = 0; i < sentence.length(); i++) {
            index = sentence.indexOf(ch, fromIndex);
            if (index != -1) {
                System.out.println("'" + ch + "' was found at " + index);
                fromIndex = index + 1;
                count++;
            }
        }
        if (count == 0) {
            System.out.println("The letter, '" + ch + "'does not exist in the sentence");
        }
    }
}

Output:

The first occurance of 'l' is at 2
All positions: 
'l' was found at 2
'l' was found at 3
'l' was found at 9

Alternatively, you can use String#charAt:

public class Main {
    public static void main(String[] args) {
        String sentence = "Hello world!";
        char ch = 'l';
        int count = 0;
        for (int i = 0; i < sentence.length(); i++) {
            if (sentence.charAt(i) == ch) {
                System.out.println("'" + ch + "' was found at " + i);
                count++;
            }
        }
        if (count == 0) {
            System.out.println("The letter, '" + ch + "'does not exist in the sentence");
        }
    }
}

Output:

'l' was found at 2
'l' was found at 3
'l' was found at 9

You can also add all the positions to a List<Integer> and display the same.

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String sentence = "Hello world!";
        char ch = 'l';
        List<Integer> positions = new ArrayList<>();
        for (int i = 0; i < sentence.length(); i++) {
            if (sentence.charAt(i) == ch) {
                positions.add(i);
            }
        }
        if (positions.size() == 0) {
            System.out.println("The letter, '" + ch + "'does not exist in the sentence");
        } else {
            System.out.println("The positions where '" + ch + "' was found is/are " + positions);
        }
    }
}

Output:

The positions where 'l' was found is/are [2, 3, 9]


Source: stackoverflow