Problem z StringTokenizer - nie liczy tak jak powinien

0

Witam,

mam następujący problem:

Po wczytaniu pliku z tekstem:


ala ma kota
kot ala pies pies ala
i "co tam, co tam" Ala! Kot? Pies;i kot


metoda countTokens() powinna zwrócić 18 wyrazów, eliminując separatory.

Zwraca natomiast 16 co ciekawe.
Nazwa pliku tekstowego jest argumentem wywołania programu.

Oto klasa:

package zadania1;
import java.util.;
import java.io.
;

public class SortedWordsFromFile {

int n;	// liczba słów
int i;
public SortedWordsFromFile(String txt) {

	String path = System.getProperty("user.dir") + "/" + txt;
	String temp = "";
	
	try {
		
		BufferedReader in = new BufferedReader(new FileReader(path));
		StringBuffer sb = new StringBuffer();
		String line;
		
		while((line = in.readLine()) != null) {
			sb.append(line).append('\n');
			
		}
		temp = sb.toString();
		System.out.println(temp);
		in.close();
		
		
	} catch(IOException exc) {
		exc.printStackTrace();
	}
	
	StringTokenizer st = new StringTokenizer(temp, " .,!?\"'\\()[]{}:;");
	n = st.countTokens();
	while(st.hasMoreTokens()) {
		i++;
		System.out.println(i + " " + st.nextToken());
	}
}

public int getWordsCount() {
	return n;
}

}

Druga klasa i metoda main:

package zadania1;

public class SortedTest {

public static void main(String[] args) {
	
	SortedWordsFromFile swf = new SortedWordsFromFile(args[0]);
	System.out.println("Wszystkich słów jest: " + swf.getWordsCount());
	
	
}

}

Oto wyjście:


ala ma kota
kot ala pies pies ala
i "co tam, co tam" Ala! Kot? Pies;i kot

1 ala
2 ma
3 kota
kot
4 ala
5 pies
6 pies
7 ala
i
8 co
9 tam
10 co
11 tam
12 Ala
13 Kot
14 Pies
15 i
16 kot

Wszystkich słów jest: 16


Tak jak widać, nie są zliczane wyrazy zaczynające się od nowego wiersza.

Z góry serdecznie dziękuję za pomoc i pozdrawiam, Łukasz

0

Programik dobrze zlicza.
Zauważ że nie zaliczasz znaku nowej lini do separatorów. Dlatego
7 ala
i
Jest poprawne bo program zliczył tak naprawdę: "7 ala \ni" jako całość.

P.S.
Też cię pozdrawiamy.

0

Faktycznie, jak napiszę tekst w jednym wierszu to jest ok. Dzięki

0

Imho, wiersz

String path = System.getProperty("user.dir") + "/" + txt;

jest błędny. Powinno być:

String path = System.getProperty("user.dir") + File.pathSeparator + txt;

Ten wiersz

StringTokenizer st = new StringTokenizer(temp, " .,!?\"'\\()[]{}:;");

też bym zmienił

StringTokenizer st = new StringTokenizer(temp, " .,!?\"'\\()[]{}:;\n\t");
0

Drugi argument konstruktora StringTokenizer już zdążyłem poprawić, a File.pathSeparator to zgadza się, jest bardziej przenośny.

0

Zamiast File.pathSeparator powinno był File.separator.
pathSeparator wstawia ';'
java.io.FileNotFoundException: C:\Users\lukas\workspace\lukas;sortText.txt (Nie można odnaleźć określonego pliku)

1 użytkowników online, w tym zalogowanych: 0, gości: 1