Rechercher une sous chaine ds une chaine

id000 Messages postés 23 Date d'inscription jeudi 7 février 2008 Statut Membre Dernière intervention 2 juin 2009 - 24 janv. 2009 à 17:01
 Utilisateur anonyme - 25 janv. 2009 à 07:05
salut à tous ,
je voudrai realiser une application qui permet de rechercher une sous chaine (ds un jtextfield) dans une chaine (ds un jtextarea) et chaque fois qu'il la trouve il la selectionne
le code source :
package rechercher_remplacer;



import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;





public class Cadre1
    extends JFrame {
  JPanel contentPane;
  BorderLayout borderLayout1 = new BorderLayout();
  JPanel jPanel1 = new JPanel();
  JPanel jPanel2 = new JPanel();
  JToolBar jToolBar1 = new JToolBar();
  GridLayout gridLayout1 = new GridLayout();
  JButton jButton1 = new JButton();
  JButton jButton2 = new JButton();
  JTextField jTextField1 = new JTextField(18);
  JScrollPane jScrollPane1 = new JScrollPane();
  GridLayout gridLayout2 = new GridLayout();
  static JTextArea jTextArea1 = new JTextArea();



  public Cadre1() {
    try {
      setDefaultCloseOperation(EXIT_ON_CLOSE);
      jbInit();
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }
  }



  /**
   * Initialisation du composant.
   *
   * @throws java.lang.Exception
   */
  private void jbInit() throws Exception {
    contentPane = (JPanel) getContentPane();
    contentPane.setLayout(borderLayout1);
    setSize(new Dimension(400, 300));
    setTitle("Rechercher/Remplacer");
    jPanel1.setLayout(gridLayout1);
    jButton1.setText("Rechercher");
    jButton1.addActionListener(new Cadre1_jButton1_actionAdapter(this));
    jButton2.setText("Remplacer");
    jButton2.addActionListener(new Cadre1_jButton2_actionAdapter(this));
    jPanel2.setLayout(gridLayout2);
    contentPane.add(jPanel1, java.awt.BorderLayout.NORTH);
    jPanel1.add(jToolBar1);
    jToolBar1.add(jButton1);
    jToolBar1.add(jTextField1);
    jToolBar1.add(jButton2);
    contentPane.add(jPanel2, java.awt.BorderLayout.CENTER);
    jPanel2.add(jScrollPane1);
    jScrollPane1.getViewport().add(jTextArea1);
  }



  public void jButton2_actionPerformed(ActionEvent e) {
  //methode de remplaçer
  }



  public void jButton1_actionPerformed(ActionEvent e) {
   Cadre2 c =new Cadre2();
   c.setSize(300,150);
   c.setLocation(300,150);
   c.setVisible(true);
  }
}



class Cadre1_jButton2_actionAdapter
    implements ActionListener {
  private Cadre1 adaptee;
  Cadre1_jButton2_actionAdapter(Cadre1 adaptee) {
    this.adaptee = adaptee;
  }



  public void actionPerformed(ActionEvent e) {
    adaptee.jButton2_actionPerformed(e);
  }
}



class Cadre1_jButton1_actionAdapter
    implements ActionListener {
  private Cadre1 adaptee;
  Cadre1_jButton1_actionAdapter(Cadre1 adaptee) {
    this.adaptee = adaptee;
  }



  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}
la 2éme fenetre
package rechercher_remplacer;



import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;





public class Cadre2
    extends JFrame {
  GridLayout gridLayout1 = new GridLayout();
  JPanel jPanel1 = new JPanel();
  JPanel jPanel2 = new JPanel();
  BorderLayout borderLayout1 = new BorderLayout();
  JPanel jPanel3 = new JPanel();
  JButton jButton1 = new JButton();
  JPanel jPanel4 = new JPanel();
  FlowLayout flowLayout1 = new FlowLayout();
  JLabel jLabel1 = new JLabel();
  static JTextField jTextField1 = new JTextField(17);
  GridLayout gridLayout2 = new GridLayout();
  JButton jButton2 = new JButton();
  public Cadre2() {
    try {
      jbInit();
    }
    catch (Exception exception) {
      exception.printStackTrace();
    }
  }



  private void jbInit() throws Exception {
    getContentPane().setLayout(gridLayout1);
    gridLayout1.setColumns(1);
    gridLayout1.setRows(2);
    jPanel1.setLayout(borderLayout1);
    jPanel1.setMinimumSize(new Dimension(0, 0));
    jButton1.setText("Rechercher");
    jButton1.addActionListener(new Cadre2_jButton1_actionAdapter(this));
    jPanel4.setLayout(flowLayout1);
    flowLayout1.setAlignment(FlowLayout.LEFT);
    jLabel1.setText("Texte à rechercher");
    jPanel3.setLayout(gridLayout2);
    gridLayout2.setColumns(1);
    gridLayout2.setRows(2);
    jButton2.setText("Remplacer");
    this.getContentPane().add(jPanel1);
    jPanel1.add(jPanel3, java.awt.BorderLayout.EAST);
    jPanel3.add(jButton1);
    jPanel3.add(jButton2);
    jPanel1.add(jPanel4, java.awt.BorderLayout.CENTER);
    jPanel4.add(jLabel1);
    jPanel4.add(jTextField1);
    this.getContentPane().add(jPanel2);
  }
  String textarea = Cadre1.jTextArea1.getText();
  int longue = textarea.length();
  String textfield = jTextField1.getText();
  int longtf = textarea.length();int l=0;boolean trouver=false;
  public void jButton1_actionPerformed(ActionEvent e) {
   while(l<longue)
   {if(textarea.charAt(l)==textfield.charAt(0))
     {if((textarea.substring(l,l+longtf)).equals(textfield))
       {
         Cadre1.jTextArea1.select(l,l+longtf);
         trouver=true;
         l=longtf;break;
       }
     }
     l++;
   }
   if (trouver=false){System.out.println("Non trouvé");
   }
  }
}



class Cadre2_jButton1_actionAdapter
    implements ActionListener {
  private Cadre2 adaptee;
  Cadre2_jButton1_actionAdapter(Cadre2 adaptee) {
    this.adaptee = adaptee;
  }



  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}
les messages d'erreur qui s'affiche :
at java.lang.String.charAt(String.java:444)
 at rechercher_remplacer.Cadre2.jButton1_actionPerformed(Cadre2.java:73)
 at rechercher_remplacer.Cadre2_jButton1_actionAdapter.actionPerformed(Cadre2.java:96)

aidez mois svp   

2 réponses

chris081 Messages postés 90 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 4 février 2009
24 janv. 2009 à 19:00
Salut

String textarea = Cadre1.jTextArea1.getText();

int longue = textarea.length();

String textfield = jTextField1.getText();

int longtf = textarea.length();

int l=0;

boolean trouver=false;


public void jButton1_actionPerformed(ActionEvent e) {

while(l<longue){>

if(textarea.charAt(l)==textfield.charAt(0)){
// java fonctionne en base 0, c'est a dire, qu'il

// commence a compter a partir de 0.

//

// ici, ce que tu écrit, c'est équivalent a

// String s = "abc"; // length -> 3 (de 0 inclus a 2 inclus)

// String t = "adefghijk"; // length - > 9( de 0 inclus a 8 inclus)

//

// Bon, ensuite, tu recupere une sous chaine de ta chaine

// d'origine (textarea.substring (l, l + longtf))

// Ce qui revient a (avec la longueur de mes 2 string ci-dessus)

// t.substring (s.length, s.length + t.length)

// en chiffres, ca donnes t.substring (3, 3 + 9)

//

// Donc, nous avons récupéré une sous-chaine de t

// dont le premier caractères de la sous-chaine est le

// 4e caractères de la chaine t, et qui a une longueur

// de 12 caractères, Soit fghijk (longueur:6 caractères).

// Il manque 6 caractères a quelque part.

//

// Ensuite, nous vérifions que notre chaine "fghijk "

// soit égale à s ("abc")

if((textarea.substring(l,l+longtf)).equals(textfield)){

Cadre1.jTextArea1.select(l,l+longtf);

trouver=true;
//

// ici, tu affectes la valeur de longtf (soit le nombre

// de caractères total de la plus longue chaine (jtextfield)

// a l. L'instruction suivant l'affectation de valeur à

// la variable l est un break. Ce break indique que tu

// dois sortir de la boucle. Cependant, la valeur

// de continuation que tu utilises pour la boucle

// est l < longue. Lorsque le break sera atteint,

// l aura la valeur de longtf (l=longtf) (longue

// et longtf pointent tout deux vers la même valeur.

// voit tes déclaration au début de la méthode)

//

l=longtf;

break;

}

}

l++;

}

if (trouver=false){System.out.println("Non trouvé");

}

}
Corrige les petit détails ci-dessus et essait a nouveau voir si ca va fonctionner.
chris081

<hr width="25%" align="left" />

Est-ce que les femmes pètent autant que les hommes ?
Oui. Cependant, les hommes semblent en tirer plus de gloire que les femmes.

Retrouvez l'intégrale ici</longue){>
0
Utilisateur anonyme
25 janv. 2009 à 07:05
Salut,

l = textarea.indexOf(textfield); // éviter l minuscule que l'on peut confondre avec 1

Si l > -1 : la sous chaine existe et,

Code :
int longtf textfield.length(); // et non int longtf textarea.length();

String souschaine = textarea.substring(l, l+longtf);

Cordialement,

Dan
0