webForumDet fria alternativet

Problem med StreamTokenizer

3 svar · 235 visningar · startad av BABBA

BABBAMedlem sedan feb. 2000280 inlägg
#1

Jag vill parsa en text som innehåller skräptecken och bara plucka ut orden. Min textfil ser ut så här:
---- test.txt ----
!Three!!?(words" '133+ 4real!]
,:words??
-------------------

Min java-kod:

import java.io.*;

public class  Tokenizer  
{
	public static void main(String args[] ) throws Exception
	{
		Reader r = new BufferedReader(new FileReader("test.txt"));

		StreamTokenizer parser = new StreamTokenizer(r);
		
		parser.lowerCaseMode(true);

		parser.eolIsSignificant(true);	
	
		while ( parser.nextToken() != StreamTokenizer.TT_EOF )
		{
			if ( parser.ttype == StreamTokenizer.TT_WORD)
				System.out.println(parser.sval +" "+ parser.ttype);
		} 
	}
}

Det som skrivs ut är:
three
words
words

alltså inte "real". Varför inte då?? Jag behöver verkligen hjälp med det här! Tack på förhand!

sgtpepperMedlem sedan apr. 20007 588 inlägg
#2

Problemet är att StreamTokenizern kommer att tolka 133+ 4real!] som en sträng, antar jag, eftersom denna ordföljd börjar med en ".

En lösning som funkar är att tala om för Tokenizern att ' och " skall tolkas som vanliga tecken med ordinaryChar()-metoden, lägg till det före while-loopen:

	parser.ordinaryChar('\'');
	parser.ordinaryChar('\"');
BABBAMedlem sedan feb. 2000280 inlägg
#3

Tack sgtpepper! Kunglig lösning...

sgtpepperMedlem sedan apr. 20007 588 inlägg
#4

Varsågod :).

Jag ser att wF plockade bort backslash:en från första ordinaryChar()-metoden för enkelfnutt, fast det har du väl antagligen redan fixat, men hursomhelst så måste även enkelfnutt "escape:as":

parser.ordinaryChar('[b]\[/b]'');
131 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)