Comment trouver un mot dans une chaîne Java avec la méthode indexOf()

JavaBeginner
Pratiquer maintenant

Introduction

Dans ce tutoriel de programmation Java, nous allons explorer la méthode indexOf(), un outil polyvalent pour trouver des mots ou des caractères au sein d'une chaîne de caractères Java (Java String). La méthode indexOf() est essentielle pour travailler avec du texte dans les applications Java, vous permettant de rechercher un contenu spécifique au sein de chaînes plus larges. À la fin de ce tutoriel, vous comprendrez comment utiliser efficacement cette méthode et l'appliquer dans divers scénarios pour améliorer vos compétences en manipulation de chaînes Java.

Création de votre premier programme de recherche de chaînes

Dans cette étape, nous allons créer un programme Java simple qui démontre comment utiliser la méthode indexOf() pour trouver un mot spécifique au sein d'une chaîne de caractères.

Comprendre la méthode indexOf()

La méthode indexOf() est une fonction intégrée dans la classe String de Java qui vous aide à localiser la position d'une sous-chaîne au sein d'une chaîne plus large. Voici la syntaxe de base :

int indexOf(String str)

Cette méthode renvoie l'index (position) de la première occurrence de la sous-chaîne spécifiée. Si la sous-chaîne n'est pas trouvée, la méthode renvoie -1.

Création du fichier Java

Créons notre premier programme pour voir la méthode indexOf() en action :

  1. Ouvrez le WebIDE dans votre environnement LabEx.
  2. Créez un nouveau fichier en cliquant sur l'icône "New File" ou en utilisant le menu File.
  3. Nommez le fichier StringSearchDemo.java.
  4. Entrez le code suivant dans le fichier :
public class StringSearchDemo {
    public static void main(String[] args) {
        // Create a sample sentence to search through
        String sentence = "Java programming is both fun and challenging";

        // Find the position of a word using indexOf()
        int position = sentence.indexOf("fun");

        // Display the results
        System.out.println("Original sentence: " + sentence);
        System.out.println("Searching for the word 'fun'");

        if (position != -1) {
            System.out.println("The word 'fun' was found at position: " + position);
        } else {
            System.out.println("The word 'fun' was not found in the sentence");
        }
    }
}

Compilation et exécution du programme

Maintenant, compilons et exécutons notre programme :

  1. Ouvrez un terminal dans le WebIDE (s'il n'est pas déjà ouvert).
  2. Compilez le fichier Java en exécutant :
    javac StringSearchDemo.java
  3. Exécutez le programme compilé :
    java StringSearchDemo

Vous devriez voir une sortie similaire à :

Original sentence: Java programming is both fun and challenging
Searching for the word 'fun'
The word 'fun' was found at position: 25

Exploration du résultat

La sortie montre que notre programme a trouvé avec succès le mot "fun" à la position 25 dans la chaîne. En Java, les index de chaîne commencent à 0, donc le 26ème caractère est à l'index 25.

Vous pouvez le vérifier en comptant les caractères : "Java programming is both " a exactement 25 caractères, et ensuite "fun" commence.

Essayez de rechercher un mot différent

Modifions notre programme pour rechercher un mot différent. Changez le terme de recherche de "fun" à "programming" dans votre code :

int position = sentence.indexOf("programming");
System.out.println("Searching for the word 'programming'");

Compilez et exécutez le programme à nouveau :

javac StringSearchDemo.java
java StringSearchDemo

Vous devriez maintenant voir :

Original sentence: Java programming is both fun and challenging
Searching for the word 'programming'
The word 'programming' was found at position: 5

Le mot "programming" commence à la position 5, ce qui est correct car "Java " a 5 caractères.

Trouver plusieurs occurrences d'un mot

Maintenant que nous comprenons les bases de l'utilisation de indexOf() pour trouver une seule occurrence d'un mot, améliorons nos compétences en apprenant à trouver toutes les occurrences d'un mot dans une chaîne.

Comprendre la seconde signature de la méthode indexOf()

La méthode indexOf() a une autre forme utile :

int indexOf(String str, int fromIndex)

Cette version vous permet de spécifier une position de départ pour la recherche. En utilisant cette forme, nous pouvons trouver toutes les occurrences d'un mot en commençant chaque nouvelle recherche là où nous nous sommes arrêtés.

Création d'un programme de recherche multiple

Créons un nouveau programme Java qui trouve toutes les occurrences d'un mot spécifique :

  1. Créez un nouveau fichier nommé MultipleFinder.java
  2. Entrez le code suivant :
public class MultipleFinder {
    public static void main(String[] args) {
        // Create a sample text with multiple occurrences of a word
        String paragraph = "Java is a popular programming language. Java runs on various platforms. " +
                          "Java is used for developing web applications, mobile apps, and more. " +
                          "Learning Java is essential for many software development roles.";

        System.out.println("Original text:");
        System.out.println(paragraph);
        System.out.println("\nSearching for all occurrences of 'Java':");

        // Find all occurrences of "Java"
        String searchWord = "Java";
        int position = 0;
        int count = 0;

        // Loop until no more occurrences are found
        while (position != -1) {
            position = paragraph.indexOf(searchWord, position);

            if (position != -1) {
                count++;
                System.out.println("Occurrence " + count + " found at position: " + position);

                // Move past this occurrence to find the next one
                position += searchWord.length();
            }
        }

        System.out.println("\nTotal occurrences found: " + count);
    }
}

Compilation et exécution du programme de recherche multiple

Maintenant, compilons et exécutons notre nouveau programme :

  1. Dans le terminal, compilez le fichier Java :
    javac MultipleFinder.java
  2. Exécutez le programme compilé :
    java MultipleFinder

Vous devriez voir une sortie similaire à :

Original text:
Java is a popular programming language. Java runs on various platforms. Java is used for developing web applications, mobile apps, and more. Learning Java is essential for many software development roles.

Searching for all occurrences of 'Java':
Occurrence 1 found at position: 0
Occurrence 2 found at position: 42
Occurrence 3 found at position: 72
Occurrence 4 found at position: 149

Total occurrences found: 4

Comment le programme fonctionne

Décomposons comment ce programme trouve toutes les occurrences :

  1. Nous définissons la position de recherche initiale sur 0 (le début de la chaîne)
  2. Nous entrons une boucle while qui continue jusqu'à ce que indexOf() renvoie -1 (plus de correspondances)
  3. Pour chaque correspondance, nous :
    • Affichons la position où nous avons trouvé le mot
    • Mettons à jour la position de recherche pour commencer après la correspondance actuelle en ajoutant la longueur du mot recherché
  4. La boucle continue jusqu'à ce qu'aucune autre correspondance ne soit trouvée
  5. Enfin, nous affichons le nombre total d'occurrences trouvées

Gestion de la sensibilité à la casse

La méthode indexOf() est sensible à la casse par défaut. Modifions notre programme pour effectuer une recherche insensible à la casse en convertissant à la fois le texte et le terme de recherche en minuscules :

Ajoutez ces lignes à MultipleFinder.java juste après le démarrage de la méthode main :

// Case-insensitive search demonstration
System.out.println("\n--- Case-insensitive search ---");
String lowercaseParagraph = paragraph.toLowerCase();
String lowercaseSearchWord = searchWord.toLowerCase();

position = 0;
count = 0;

while (position != -1) {
    position = lowercaseParagraph.indexOf(lowercaseSearchWord, position);

    if (position != -1) {
        count++;
        System.out.println("Occurrence " + count + " found at position: " + position);
        position += lowercaseSearchWord.length();
    }
}

System.out.println("\nTotal occurrences found (case-insensitive): " + count);

Compilez et exécutez le programme mis à jour :

javac MultipleFinder.java
java MultipleFinder

La sortie inclura désormais les résultats de recherche sensibles et insensibles à la casse.

Construction d'un analyseur de texte simple

Dans cette étape, nous allons créer une application pratique qui utilise la méthode indexOf(). Nous allons construire un analyseur de texte simple qui peut compter des mots spécifiques et identifier leurs positions dans un texte plus large.

Création de l'analyseur de texte

  1. Créez un nouveau fichier nommé TextAnalyzer.java
  2. Entrez le code suivant :
import java.util.Scanner;

public class TextAnalyzer {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        // Sample text to analyze
        String sampleText = "Java is one of the most popular programming languages. Java was developed " +
                          "by Sun Microsystems. Today, Java is used to develop mobile apps, web applications, " +
                          "desktop applications, games and much more. Java is known for its simplicity, " +
                          "object-oriented features, and platform independence.";

        System.out.println("Text Analyzer Program");
        System.out.println("=====================");
        System.out.println("\nText to analyze:");
        System.out.println(sampleText);

        // Prompt user for a word to search
        System.out.print("\nEnter a word to search for: ");
        String searchWord = scanner.nextLine();

        // Call methods to analyze the text
        int occurrences = countOccurrences(sampleText, searchWord);

        // Display results
        System.out.println("\nAnalysis Results:");
        System.out.println("----------------");
        System.out.println("Word searched for: \"" + searchWord + "\"");
        System.out.println("Number of occurrences: " + occurrences);

        // Show the positions if the word was found
        if (occurrences > 0) {
            System.out.println("\nPositions where \"" + searchWord + "\" appears:");
            findPositions(sampleText, searchWord);
        }

        // Calculate percentage of the text the word represents
        if (occurrences > 0) {
            // Calculate what percentage of the text this word represents
            double percentage = (double)(searchWord.length() * occurrences) / sampleText.length() * 100;
            System.out.printf("\nThe word \"%s\" makes up %.2f%% of the total text.\n",
                              searchWord, percentage);
        }

        scanner.close();
    }

    // Method to count occurrences of a word in the text
    public static int countOccurrences(String text, String word) {
        int count = 0;
        int position = 0;

        while (position != -1) {
            position = text.indexOf(word, position);

            if (position != -1) {
                count++;
                position += word.length();
            }
        }

        return count;
    }

    // Method to find and print all positions of a word
    public static void findPositions(String text, String word) {
        int position = 0;
        int occurrence = 0;

        while (position != -1) {
            position = text.indexOf(word, position);

            if (position != -1) {
                occurrence++;
                System.out.println("  Occurrence " + occurrence + ": Position " + position +
                                  " (ends at position " + (position + word.length() - 1) + ")");

                // Show the context around the word
                int contextStart = Math.max(0, position - 10);
                int contextEnd = Math.min(text.length(), position + word.length() + 10);
                String context = text.substring(contextStart, contextEnd);

                // Highlight the word in the context
                System.out.print("  Context: ");
                if (contextStart > 0) {
                    System.out.print("...");
                }

                System.out.print(context);

                if (contextEnd < text.length()) {
                    System.out.print("...");
                }
                System.out.println("\n");

                position += word.length();
            }
        }
    }
}

Compilation et exécution de l'analyseur de texte

Maintenant, compilons et exécutons notre analyseur de texte :

  1. Dans le terminal, compilez le fichier Java :

    javac TextAnalyzer.java
  2. Exécutez le programme compilé :

    java TextAnalyzer
  3. Lorsque vous y êtes invité, entrez un mot à rechercher, comme Java

Vous devriez voir une sortie similaire à :

Text Analyzer Program
=====================

Text to analyze:
Java is one of the most popular programming languages. Java was developed by Sun Microsystems. Today, Java is used to develop mobile apps, web applications, desktop applications, games and much more. Java is known for its simplicity, object-oriented features, and platform independence.

Enter a word to search for: Java

Analysis Results:
----------------
Word searched for: "Java"
Number of occurrences: 4

Positions where "Java" appears:
  Occurrence 1: Position 0 (ends at position 3)
  Context: ...Java is one o...

  Occurrence 2: Position 48 (ends at position 51)
  Context: ...guages. Java was dev...

  Occurrence 3: Position 93 (ends at position 96)
  Context: ...Today, Java is used...

  Occurrence 4: Position 197 (ends at position 200)
  Context: ...more. Java is know...

The word "Java" makes up 1.67% of the total text.

Comprendre l'analyseur de texte

Notre analyseur de texte fait ce qui suit :

  1. Il affiche un exemple de texte pour l'analyse
  2. Il demande à l'utilisateur de saisir un mot à rechercher
  3. Il compte combien de fois le mot apparaît dans le texte
  4. Il affiche les positions où le mot apparaît
  5. Pour chaque occurrence, il montre le contexte environnant
  6. Il calcule quel pourcentage du texte total est constitué du mot recherché

Cette application démontre une utilisation pratique de la méthode indexOf() pour l'analyse de texte. Le programme pourrait être étendu pour inclure plus de fonctionnalités, telles que :

  • Recherche insensible à la casse
  • Recherche de mots entiers uniquement (pas de parties de mots)
  • Analyse de plusieurs mots à la fois
  • Génération de statistiques sur le texte

Essayez d'exécuter le programme à nouveau avec différents mots de recherche pour voir comment il se comporte avec diverses entrées.

Résumé

Dans ce tutoriel, vous avez appris à utiliser la méthode indexOf() en Java pour trouver des mots dans des chaînes de caractères. Vous avez maîtrisé :

  1. L'utilisation de indexOf() pour trouver la première occurrence d'un mot dans une chaîne
  2. La recherche de toutes les occurrences d'un mot en utilisant une boucle et la seconde forme de indexOf()
  3. L'exécution de recherches insensibles à la casse en convertissant les chaînes en minuscules
  4. La construction d'une application d'analyse de texte pratique qui démontre les utilisations concrètes de la méthode indexOf()

Ces compétences de manipulation de chaînes sont fondamentales en programmation Java et seront précieuses dans diverses tâches de programmation, notamment le traitement des données, la validation des entrées utilisateur et l'analyse de texte. En comprenant comment localiser et travailler avec des parties spécifiques de chaînes, vous pouvez créer des applications plus sophistiquées et conviviales.

Au fur et à mesure que vous poursuivez votre parcours Java, vous pouvez étendre ces concepts en explorant d'autres méthodes de la classe String telles que substring(), replace() et les expressions régulières pour un traitement de texte plus avancé.