webForumDet fria alternativet

Söka efter text i en JTextArea

6 svar · 300 visningar · startad av jme

jmeMedlem sedan maj 20011 967 inlägg
#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?

SPiNMedlem sedan mars 20005 832 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. :)

ViktorMedlem sedan aug. 20021 710 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

SPiNMedlem sedan mars 20005 832 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 ).

jmeMedlem sedan maj 20011 967 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...

phonkworksMedlem 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

jmeMedlem sedan maj 20011 967 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?

Genererad på 500 ms · cache AV · v20260730165559-full.f96bc7eb