Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Aiuto metodo trova / trova successivo
Forum - Java - Aiuto metodo trova / trova successivo

Avatar
Sevenjeak (Normal User)
Pro


Messaggi: 91
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 18:09
Martedì, 05/11/2013
In questo periodo sto facendo un mio editor in java, dove, ho un problema con del codice, vorrei creare la funzione, trova e sostituisci, per ora sto facendo la funzione che trova il testo desiderato, trova la prima occorrenza trovata del testo, e le occorrenze successive, il codice è questo:

Codice sorgente - presumibilmente Delphi

  1. String originText = textPane.getText();
  2.                           String findWord = wfind.getText();
  3.                          
  4.                           if (index != -1) {
  5.                              index = originText.indexOf(findWord, index + findWord.length());
  6.                           }else {
  7.                              index = originText.indexOf(findWord);
  8.                           }
  9.                          
  10.                           System.out.println(index + " ; " + findWord.length());
  11.                          
  12.                           if (index == -1) {
  13.                                  JOptionPane.showMessageDialog(null, "Nessuna occorrenza trovata");
  14.                           }else {
  15.                              textPane.grabFocus();
  16.                              textPane.select(index, index + findWord.length());
  17.                           }



Questo codice lo eseguo alla pressione di un tasto, e come potete vedere mi trova il testo nell'oggetto textPane ( un JTextPane ), ora, il problema è che, quando, nella JTextPane scrivo:

ciao ciao

la prima volta che eseguo il codice mi sottolinea il primo ciao ( a partire dal caratteri all'indice 0 fino alla fine della frase, poi se, premo di nuovo il pulsante mi sottolinea il secondo ciao, come in effetti vorrei io, e fin qui e tutto ok, il problema è quando li faccio trovare una parola collocata in un'altra riga, mi funziona bene solo per la prima riga, cioè, se ad esempio, nella seconda riga, io ho la stringa come va e la vorrei trovare, utilizzando il codice qui sopra, mi sottolinea ome va, insomma mi sottolinea in modo errato, questo mi succede a partire dalla seconda riga in poi.

Ho pensato, facendo stampare i numeri di indice sottolineati, ché forse mi considerava il carattere a capo.

Detto questo ho pensato di levare dalla testo preso il caratteri a capo, ma non saprei, e se l'utente immette manualmente quel carattere nel testo? ho pensato anche di compiere la ricerca riga per riga, ma non saprei, ecco perché scrivo qui.

Come potrei risolvere, mi conviene fare eseguire la ricerca su ogni riga o c'è un altro metodo per risolvere il mio problema?

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 15:10
Mercoledì, 06/11/2013
Sembra strano che sottolinei solo a partire dal secondo carattere... scusa se te lo chiedo ma non ho capito se il problema sta nel sistema di sottolineatura o nel trovare a che carattere inizia la sotto stringa trovata. Nel secondo caso la soluzione sembra facile, ma facci sapere

PM Quote
Avatar
Sevenjeak (Normal User)
Pro


Messaggi: 91
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 16:29
Mercoledì, 06/11/2013
Il problema sta nella sottolineatura, cioè, dalla seconda riga in poi mi inizia a sottolineare in modo sbagliato, ho provato lo stesso codice in un mio esempio, ora purtroppo sono su un'altro sistema, ma appena posso posto l'altro codice di prova che ho fatto.

EDIT:

Ecco il codice di esempio che avevo fatto, ho provato a modificare il codice ma niente:

Codice sorgente - presumibilmente Java

  1. import javax.swing.*;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.MouseEvent;
  5. import java.awt.event.MouseListener;
  6.  
  7. class GUI extends JFrame {
  8.         private JTextField textField = null;
  9.         private JTextPane textPane = null;
  10.         private JButton button = null;
  11.         private int index = -1;
  12.        
  13.         public GUI() {
  14.                 setLayout(new BorderLayout());
  15.                 setVisible(true);
  16.                
  17.                 JPanel topPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
  18.                 textField = new JTextField(15);
  19.                 button = new JButton("Trova / trova successivo");
  20.                 textPane = new JTextPane();
  21.                
  22.                 topPanel.add(textField);
  23.                 topPanel.add(button);
  24.                
  25.                 add(topPanel, BorderLayout.NORTH);             
  26.                 add(textPane, BorderLayout.CENTER);
  27.                
  28.                 button.addMouseListener(new MouseListener() {
  29.  
  30.                         @Override
  31.                         public void mouseClicked(MouseEvent arg0) {
  32.                                 String originText = textPane.getText();
  33.                 String findWord = textField.getText();
  34.                
  35.                 if (index != -1) {
  36.                    index = originText.indexOf(findWord, index + findWord.length());
  37.                 }else {
  38.                    index = originText.indexOf(findWord);
  39.                 }
  40.                
  41.                
  42.                
  43.                 if (index == -1) {
  44.                        JOptionPane.showMessageDialog(null, "Nessuna occorrenza trovata");
  45.                 }else {
  46.                    textPane.grabFocus();
  47.                    textPane.select(index, index + findWord.length());
  48.                    
  49.                    JOptionPane.showMessageDialog(null, "Elemento trovato\n\nStart selection = " + index);
  50.                 }
  51.                                
  52.                         }
  53.  
  54.                         @Override
  55.                         public void mouseEntered(MouseEvent arg0) {
  56.                                 // TODO Auto-generated method stub
  57.                                
  58.                         }
  59.  
  60.                         @Override
  61.                         public void mouseExited(MouseEvent arg0) {
  62.                                 // TODO Auto-generated method stub
  63.                                
  64.                         }
  65.  
  66.                         @Override
  67.                         public void mousePressed(MouseEvent arg0) {
  68.                                 // TODO Auto-generated method stub
  69.                                
  70.                         }
  71.  
  72.                         @Override
  73.                         public void mouseReleased(MouseEvent arg0) {
  74.                                 // TODO Auto-generated method stub
  75.                                
  76.                         }
  77.                        
  78.                 });
  79.         }
  80. }
  81.  
  82. public class es1 {
  83.         public static void main(String[] args) {
  84.                 new GUI();
  85.         }
  86. }



Se scrivi del testo nel JTextPane è trovi una parola contenente nella seconda riga e nelle righe successivi vedi il problema.

Ultima modifica effettuata da Sevenjeak il 06/11/2013 alle 18:46
PM Quote