webForumDet fria alternativet

Söka efter text i en JTextArea

Java

6 svar · 300 visningar · startad av jme

Medlem sedan maj 20012 237 inlägg
Frågan#1

Hej!

Jag ska göra en sök&ändra funktion i min text editor.
När man söker efter ett ord och programmet hittar det valda ordet så skall den markera den.

Jag började med att använda mig utav StringTokenizer.


String text = jTextArea.getText();
StringTokenizer st = new StringTokenizer(text);

String search = "kalle"; //ordet som skall letas efter

for(int i = 0; i < antal token; ++i)
{
if(st.nextToken().equals(search) )
{
 //markera ordet
}

}

Jag har lite svårt att greppa det hur man vet positionen på varje bokstav/ord.. Nån som kan förklara lite?

Medlem sedan mars 20007 896 inlägg
#2

Något liknande kanske?

String text = jTextArea.getText();
StringTokenizer tokenizer = new StringTokenizer( text );

String search = "kalle";
String contentBeforeMatch = "";
int startPos;
int endPos;

while( tokenizer.hasMoreTokens() ) {
     String currentToken = tokenizer.nextToken();

     if( currentToken.equals( search ) ) {
          startPos = contentBeforeMatch.length();
          endPos = contentBeforeMatch.length() + search.length();
     }
     else {
          contentBeforeMatch += currentToken + " ";
     }
}

Om det är flera träffar på sökordet, så får du bara ut positionen på den sista träffen. Vill du ha positionen från alla träffar skulle jag integrera en Vector som tar hand om positionerna.

Är du säker på att du ska använda en JTextArea? Vill du göra ord feta, eller liknande, så kan du använda en JTextPane. Så slipper du ha en massa markeringar bara. :)

Medlem sedan aug. 20021 752 inlägg
#3

Jag har inte tillgång till Java API nu men jag tror att det i String klassen ska finnas en funktion "indexOf", tror även det finns någon som heter "find".

/Viktor

Medlem sedan mars 20007 896 inlägg
#4

Viktor> http://java.sun.com/j2se/1.4/docs/api/ ;)

indexOf() finns ju, men ingen find()-metod. Däremot finns ju metoden matches() som man kan använda reguljära uttryck med ( Åtminstone sen 1.4 ).

Medlem sedan maj 20012 237 inlägg
#5

Tack! Nu fattar jag lite iaf..
Men när jag sedan skall markera texten så funkar det inte.

jTextArea.select(startPos, endPos); <--- händer inget...

Medlem sedan juli 2001228 inlägg
#6

Ibland kan man behöva sparka till prylarna lite med en validate() eller pack(), för att få dom att reagera som man vill...

mvh
phonk

Medlem sedan maj 20012 237 inlägg
#7

Jag hittade felet....tror jag. Det var så att när texten skulle markeras så var ett helt annat JFrame aktiverad. Jag stänge JFrame:et och då fungerade det. Fats nog vill jag att texten markeras även om "sök-fönstret" är aktivt. Kanske fungerar det bättre med en JDialog istället?

263 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)