problemer med Tokenizer og DELIMS
Jeg skal lave en applet der blandt andre funktioner skal kunne kalde en klasse, class purifyText, som skal kunne:fjerne linieskift, tabulatorer, punktummer, kommaer, udråbstegn og spørgsmålstegn fra teksten og erstatte dem med blanktegn.
bibeholde rene ord, dvs ord der udelukkende består af bogstaver.
erstatte alt andet end rene ord og blanktegn med '*'.
Fx vil en tekst som fx Petersen & Co, 3dje generation bliver til Petersen * Co * generation.
Koden virker delvist, men jeg kan ikke finde ud af hvordan jeg skal lokalisere ikke-ord og erstatte dem med '*'. Og hvordan bruger ´jeg DELIMS korrekt?:
import java.util.StringTokenizer;
/**
* PurifyText fjerner linieskift, tabulatorer, punktummer, kommaer, udråbstegn og spørgsmålstegn fra teksten og erstatter dem med blanktegn
* bibeholder rene ord, dvs ord der udelukkende består af bogstaver
* erstatter alt andet end rene ord og blanktegn med '*'
*
* @author
* @version 1.0 26.03.2003
*/
public class PurifyText implements StringHolder {
private String text = null;
private static StringTokenizer tokenizer;
public PurifyText (String t) {
text = t;
}
public String getTransformation() {
return "purify";
}
public String getTransformed() {
StringTokenizer tokenizer = new StringTokenizer(text, DELIMS, true);
StringBuffer buffer = new StringBuffer();
String token;
while (tokenizer.hasMoreTokens()) {
token = tokenizer.nextToken();
for (int i=0; i<token.length(); i++) {
char bogstav=token.charAt(i);
if(Character.isLetter(bogstav)) {
buffer.append(bogstav + "");
}else {
buffer.append(" ");//
}
}
}return buffer.toString();
}
}
HER ER STRINGHÒLDER:
/**
* @author JCC
* @version 17 mar 03
*/
public interface StringHolder {
public final String DELIMS = " .,!?\n\t";
public String getTransformed();
public String getTransformation();
}
HER ER TEXTAREA:
/**
* @author JCC
* @version 10 oct 2002, revised 17 mar 2003
*/
import java.util.StringTokenizer;
import java.awt.*;
public class WrappedTextArea extends TextArea {
private final static Color disabledColor = new Color(225, 240, 240);
private int rows;
private int columns;
private StringHolder stringHolder = null;
public WrappedTextArea(int r, int c) {
super(r, c) ;
rows = r;
columns = c;
}
// --- Mutators ---
public void setText(StringHolder stringHolder) {
StringBuffer sb = new StringBuffer();
String token;
String unwrappedText = stringHolder.getTransformed();
StringTokenizer tnzr = new StringTokenizer(unwrappedText, " ");
int remaining = columns;
while (tnzr.hasMoreTokens()) {
token = tnzr.nextToken();
if (token.length() >= remaining) {
sb.append("\n");
remaining = columns;
}
sb.append(token + " ");
remaining = remaining - token.length() - 1;
}
super.setText(
"Transformation = " + stringHolder.getTransformation() + '\n' +
"-----------------------------------------\n" +
sb.toString()
);
}
public void setEditable(boolean isEditable) { //overrides TextArea.setEditable(boolean)
super.setEditable(isEditable);
if (isEditable) {
setBackground(Color.white);
} else {
setBackground(disabledColor);
}
}
}
HER ER APPLETTEN:
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
/**
* @author JCC
* @version 10 okt 02
*/
public class StringAnalyzer extends Applet implements ActionListener {
private WrappedTextArea area = new WrappedTextArea(10, 50);
private Button setButton = new Button("Set");
private Button orgButton = new Button("Original");
private Button lcaseButton = new Button("Lowercase");
private Button ucaseButton = new Button ("Uppercase");
private Button pcaseButton = new Button ("Purify");
private final StringHolder empty = new EmptyText();
private StringHolder original;
private StringHolder lowercased;
private StringHolder uppercased;
private StringHolder purifycased;
private boolean isAnalyzing;
public void init() {
setBackground(new Color(200, 240, 240));
setSize(450, 250);
add(area);
add(setButton);
add(orgButton);
add(lcaseButton);
add(ucaseButton);
add(pcaseButton);
setAnalyzeMode(false);
setButton.addActionListener(this);
orgButton.addActionListener(this);
lcaseButton.addActionListener(this);
ucaseButton.addActionListener(this);
pcaseButton.addActionListener(this);
}
public void setAnalyzeMode(boolean is) {
isAnalyzing = is;
showStatus("isAnalysing = " + isAnalyzing);
lcaseButton.setEnabled(isAnalyzing);
orgButton.setEnabled(isAnalyzing);
ucaseButton.setEnabled(isAnalyzing);
pcaseButton.setEnabled(isAnalyzing);
if (isAnalyzing) {
setButton.setLabel("Clear");
area.setEditable(false);
} else {
setButton.setLabel("Set");
area.setText(empty);
area.setEditable(true);
}
}
public void actionPerformed(ActionEvent e) {
Button button = (Button) (e.getSource());
if (button == orgButton) {
area.setText(original);
} else if (button == lcaseButton) {
area.setText(lowercased);
} else if (button == ucaseButton){
area.setText(uppercased);
} else if (button == pcaseButton){
area.setText(purifycased);
} else if (button == setButton) {
if (isAnalyzing) {
setAnalyzeMode(false);
} else {
String newText = area.getText();
original = new OriginalText(newText);
lowercased = new LowercaseText(newText);
uppercased = new UppercaseText(newText);
purifycased = new PurifyText(newText);
setAnalyzeMode(true);
}
}
validate();
}
}
