PDA

Visualizza la versione completa : [java]parole Racchiuse Fra Caratteri


xxx81xxx
11-12-2003, 09:04
Ciao a tutti,
ho un file di testo dove ci sono delle parole racchiuse fra il carattere #.Come faccio a farle apparire a video?
il file e' fatto cosi':


ciao #ragazzi# come state? Io abbastanza #bene#
oggi e' una #giornata# molto fredda.


l'output deve essere questo


ragazzi
bene
giornata

GRAZIE A TUTTI
xxx

Angelo1974
11-12-2003, 09:07
Ciao. Nel jdk 1.4 c'č un metodo della classe String che fa al caso tuo; prova con:

String pippo = "#kdfjōslakfjsald#";
pippo = pippo.replaceAll( "#","" );
System.out.println( pippo );

xxx81xxx
11-12-2003, 09:23
non ho capito....
io devo cercare le parole che hanno un # all'inizio e alla fine... da un file di testo....


ciao #ragazzi# come state? Io abbastanza #bene#
oggi e' una #giornata# molto fredda.


devo cercare in un testo solo le parole che sono racchiuse fra 2 #


perche' dovrei fare un replace?
grazie
xxx

xxx81xxx
11-12-2003, 10:17
nessuno ha qualche idea su come potrei fare?

LeleFT
11-12-2003, 12:04
Beh... hai due possibilitā:

1) Vedi la classe StringTokenizer e provi ad utilizzarla: questa classe mette a disposizione dei meccanismi per selezionare i separatori dei vari tokens, quindi potresti impostare come separatore il carattere # in modo che lui consideri come token a se stante tutto quello che appare fra un # e l'altro

2) Tenti di implementare da solo un tokenizer con questa caratteristca: devi lavorare parecchio sulle stringhe, carattere per carattere, in modo da isolare i vari tokens.

Comunque, non dovrebbe essere difficile fare una cosa del genere. Se ho un po' di tempo provo ad implementarne uno io e se no hai ricevuto ulteriori risposte nel frattempo, te lo posto.


Ciao.

Maldito
11-12-2003, 12:07
l'idea č il modo in cuo implementarlo.. poi il codice te lo scrivi tu


apri il file
ciclo 1
iteri e prendi la riga corrente

ciclo 2
imposti una variabile intera variabile1, e la setti con l'indexof "#" della stringa corrente
fai il replaceFirst "#" con ""
imposti un altra variabile, variabile2 con l'indexOf "#"
fai il replaceFirst "#" con ""

fine ciclo2
fine ciclo1

ora prendendo la substring tra variabile1 e variabile2 hai la prima parola racchiusa tra "#" e "#"
ti basta ripetere il ciclo2 finchč indexOf > -1
e ciclo1 fino a eof

ciao

LeleFT
11-12-2003, 18:34
Io ho realizzato un tokenizer, che fa al caso tuo. Basta che tu istanzi un oggetto di questa classe, che gli setti il separatore che vuoi e la stringa da parserizzare e poi, tramite l'uso combinato dei metodi hasMoreElements() e getNext() puoi ricavarti tutte le parole e/o frasi comprese fra il tuo separatore.
Nella classe ho incluso un driver di verifica: puioi testare subito la classe avviandola e vedrai apparire a video le parole racchiuse fra il separatore #.


public class MioTokenizer {

private char separatore;
private String stringa;
private int posStart;
private int posFine;

public MioTokenizer() {
separatore = ' ';
posStart = posFine = 0;
}

public MioTokenizer(char separatore) {
this.separatore = separatore;
posStart = posFine = 0;
}

public MioTokenizer(String stringa) {
this.stringa = stringa;
separatore = ' ';
posStart = posFine = 0;
}

public MioTokenizer(char separatore, String stringa) {
this.separatore = separatore;
this.stringa = stringa;
posStart = posFine = 0;
}

public String getNext() {
String token = null;
if (hasMoreElements()) {
int i = posFine + 1;
boolean trovato = false;
while ((i < stringa.length()) && !trovato) {
if (stringa.charAt(i) == separatore) {
trovato = true;
} else {
i++;
}
}
if (trovato) {
posStart = i;
int j = posStart+1;
boolean trovato2 = false;
while ((j<stringa.length()) && !trovato2) {
if (stringa.charAt(j) == separatore) {
trovato2 = true;
}
posFine = j;
j++;
}
token = (trovato2) ? stringa.substring(posStart+1, posFine) :
stringa.substring(posStart+1, posFine+1);
}
}
return token;
}

public void setStringa(String stringa) {
this.stringa = stringa;
posStart = posFine = 0;
}

public void setSeparatore(char separatore) {
this.separatore = separatore;
posStart = posFine = 0;
}

public boolean hasMoreElements() {
boolean risposta = false;
int i = posFine + 1;
while (i<stringa.length() && !risposta) {
if (stringa.charAt(i) == separatore) risposta = true;
i++;
}
return risposta;
}

public static void main(String [] args) {
String miaStringa = "Questa č la #stringa# da #tokenizzare# per vedere se #funziona#";
MioTokenizer mt = new MioTokenizer('#', miaStringa);
while (mt.hasMoreElements()) {
System.out.println(mt.getNext());
}
}
}

Spero che ti vada bene.


Ciao. :ciauz:

Loading