27. marts 2003 - 13:56Der er
29 kommentarer og 1 løsning
tokenizer problemer
Er der ikke nogen der kan hjælpe mig med min Javaopgave?? jeg skal have Purify til at fjerne liniskift, kommaer, udråbstegn og spørgsmålstegn fra teksten og erstatte dem med blanktegn, og i stedet bare spytte de 'rene ord' ud. Jeg kan ikke få det til at virke, og er helt blank på hvordan jeg kommer videre...
Min Purify klasse ser sådan her ud:
/** * @author TINE * @version 23032003 */
import java.util.StringTokenizer;
public class Purify implements StringHolder {
private String text = null; private static final char sep = '/'; StringTokenizer tokenizer;
public Purify (String t) { text = t; }
// --- accessors ---
public String getTransformation() { return "Purify"; }
public String getTransformed() { tokenizer = new StringTokenizer(text); StringBuffer sb= new StringBuffer(); String token;
while (tokenizer.hasMoreTokens()){ token = tokenizer.nextToken(); }
public String getTransformed() { StringBuffer sb = new StringBuffer(""); for(int i = 0; i < text.length(); i++) { switch(text.charAt(i)) { case '\n': case ',': case '!': case '?': sb.append(" "); break; default: sb.append(text.charAt(i)); break; } } return sb.toString(); }
Synes godt om
Slettet bruger
27. marts 2003 - 14:24#5
Juhuu.. nu virker det! Tak!
Men kan du ikke lige hjælpe mig med én ting til? Så skal du nok få dine point :-)
Hvis nu jeg skal have den til at erstatte alt det der ikke er rene ord eller blanktegn (fx & eller 3dje) med en stjerne (*). Hvordan gør jeg så det?
Hvis du ville have " abc def x*y*z" ud så skal du bruge:
public String getTransformed() { tokenizer = new StringTokenizer(text, "\n,.!?"); StringBuffer sb = new StringBuffer();
while (tokenizer.hasMoreTokens()) { sb.append(" "); StringBuffer t = new StringBuffer(tokenizer.nextToken()); for (int i = 0; i < t.length(); i++) { if (!Character.isLetter(t.charAt(i))) { t.setCharAt(i, '*'); } } sb.append(t); }
Det virker også for mig. Jeg har endda lavet det om til statiske metoder med private konstruktor (pr. intuition - jeg kender ikke lige StringHolder og hvilke krav dette interface stiller)
Synes godt om
Slettet bruger
27. marts 2003 - 15:23#20
Arhhh... Den skulle selvfølgelig have besked på at gå videre også når den mødte en mellemrum...
Tusind tusind tak!
Ikke nok med at jeg har fået det løst - jeg tror også at jeg faktisk fatter det :-)
lige en detalje (nu hvor den store femøre er faldet). Jeg ville bruge private final static char seperator = System.getProperty("file.separator").charAt(0) i stedet så jeg fik den platforms-uafhængige fil separator.
System indeholder et Properties objekt med en masse platforms og versions oplysninger. En anden lille detalje ville være at stoppe for løkken når vi har fundet et forkert tegn (så behøves vi nemlig ikke mere information) for(int i = 0; (i < t.length())&&!realword; i++) { vil spare en masse regnekraft ved f.x. e%ewefwefwfeGAGAeghzjnnz
MHT Properties er det lige ud af landevejen. Det er bare parvise Strings der (i dette tilfælde) beskriver systemet. Prøv evt. at lave denne main metode hvis du er blevet nysgerrig: public static void main(String args[]) throws Exception{ System.getProperties().list(System.out); System.out.println(System.getProperty("java.version")); } MHT til at stoppe for løkken er det blot sund logik. Det lærer man ikke i en specifik lektion, men ved at tage nok af dem (det kommer efterhånden).
smag og behag. det er tydeligere og mere intuitivt, men et eller andet sted i min grundbog står der at man skal begrænse brugen af break i Java kode. Jeg har endnu ikke fundet ud af hvorfor og prøver langsomt at vende mig til at bruge break når det er lettere, men vaner dør langsomt. Jeg bemærkede blot at hun havde et field kaldet sep med en separator char.
Nå. Det er tekst parsning. Se f.eks. eksemplet: "1½ time og max. 2 timer, fra kl. 13:00 mandag".
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.