fredrija Skrevet 16. mars 2007 Del Skrevet 16. mars 2007 hei. jeg sliter litt med en oppgave i objektorientert programmering. hvis noen kan hjelpe så hadde det vært flott. oppgaven er som følger: Create the class FileUtils in package oving8, and implement the following methods: public static String[] findLines(InputStream in, String exp) This method searches an InputStream and returns all the lines that contain the search expression (exp). If an error occurs, null should be returned. public static String[] findLines(String filename, String exp) This method searches a file and returns all the lines that contain the search expression (exp). If an error occurs, null should be returned. skjønte ingenting av dette. kan noen forklare hvordan jeg skal bruke InputStream og eventuelt det andre "vanskelige" som må brukes. hvis noen hadde vist det ved hjelp av java-kode hadde det også vært flott Lenke til kommentar
kjey Skrevet 17. mars 2007 Del Skrevet 17. mars 2007 (endret) Hei! Tror ikke oppgaven din er helt håpløs En InputStream er en strøm som henter opp byte fra da f.eks. filer, men ved hjelp av noen andre klasser kan man gjøre om disse bytene til "karakterer". Og for å slippe å måtte lese en og en karakter til String[] (noe som tar lenger tid) kan man legge tegnene i et buffer som er et midlertidig område i primærminnet som kan betraktes som et mellomlager. Med et buffer kan man lese en og en linje fra "filen" du vil hente teksten fra. Ok, nok teori, la oss gå over til praksis. Slik som jeg har tenkt trenger du fire klasser: - InputStream (Denne er abstrakt) - FileInputStream - InputStreamReader - BufferedReader Du kan bruke de på denne måten: InputStream input = new FileInputStream(filename); // FileInputStream er subklasse til InputStream InputStreamReader reader = new InputStreamReader(input); // Leses inn som karakterer, ikke bytes BufferedReader buffer = new BufferedReader(reader); // Nå kan du lese en og en linje slik: buffer.readLine(); Det du må tenke på nå er hvordan du vil konstruere klassen din og hvordan du får lest inn en og en linje inn i tabellen din String[]. Jeg prøvde meg litt fram, men er litt for trøtt til å løse hele oppgaven. Det er ihvertfall to ting i klassen jeg laget som må rettes opp, og det er å luke ut de linjene som ikke inneholder "exp", og finne ut hvordan du får lagt til alle linjene som inneholder "exp" i tabellen din uten å få noen OutOfBounds greier osv. Håper dette hjelper litt. Er ingen fagmann, bare "hobbymann", så det er ikke sikkert alt jeg sier er helt perfekt forklart og riktig. Men jeg foreslår at du tar en titt på disse klassene i java API'et og leser hva de er til, så skjønner du sikker mer! Her er koden jeg lagde (ikke se hvis du vil løse den selv!): import java.io.*; public class FileUtil { private static InputStream input; private static InputStreamReader inputReader; private static BufferedReader buffer; private static String[] lines; public FileUtil() { } public static String[] findLines(String filename, String exp) { try { input = new FileInputStream(filename); inputReader = new InputStreamReader(input); buffer = new BufferedReader(inputReader); int i = 0; String line = buffer.readLine(); lines[i] = line; while(lines != null) { i++; line = buffer.readLine(); lines[i] = line; } // End while i = 0; // Reset } catch (IOException ex) { System.out.println("Exception: " + ex); } return lines; } } Som sagt, denne koden fungerer ikke fordi jeg rett og slett har glemt hvordan jeg bruker vanlig tabeller. Er vant til å bruke Vector klassen og ArrayList til slike ting Men uten om det skal den fungere fint. Fikk da til å lese inn hele fila i konsollet da jeg testet. Jaja, nok prat, lykke til, hvis du trenger mer hjelp så bare si ifra! Edit: Anngående sjekk av "exp" i hver linje kan gjøres ved å bruke klassen String. Bruk metoden contains() og sett det opp i en if-setning. F.eks. slik: String exp = "Hei"; if(buffer.readLine().contains(exp)) { // Hvis linjen i bufferet inneholder // exp, legger du til linja i tabellen her } Endret 17. mars 2007 av kjey Lenke til kommentar
blackbrrd Skrevet 17. mars 2007 Del Skrevet 17. mars 2007 Det er bare å bruke vector klassen internt, for så å bruke toArray metoden i Vector klassen (forutsetter nok bruk av generics) Lenke til kommentar
kjey Skrevet 17. mars 2007 Del Skrevet 17. mars 2007 (endret) Ja, eller det går ann å kopiere alle verdiene fra ArrayList til String[] ved hjelp av en for-løkke eller no. Men skjønner trådstarter noe? Spør hvis du ikke gjør det Endret 17. mars 2007 av kjey Lenke til kommentar
sim Skrevet 19. mars 2007 Del Skrevet 19. mars 2007 Anbefaler deg å lese tipsene som står rett under oppgaven # Files can be read line by line if you use a BufferedReader and the method readLine(). A BufferedReader is instantiated by wrapping another Reader with the following code: new BufferedReader(reader). To get a Reader from an InputStream, use new InputStreamReader(inputStream).# Searching for lines should be implemented by the use of the String method matches(). This method takes a regular expression as a parameter. Try searching for ".*rotten.*" in the file hamlet.txt. This expression matches any string that contains the word "rotten". # Converting from a List<String> to String[] can be performed by the following code: myList.toArray(new String[myList.size()]). Lenke til kommentar
fredrija Skrevet 19. mars 2007 Forfatter Del Skrevet 19. mars 2007 Ja, eller det går ann å kopiere alle verdiene fra ArrayList til String[] ved hjelp av en for-løkke eller no. Men skjønner trådstarter noe? Spør hvis du ikke gjør det 8174507[/snapback] hei, takk for alle svar, har lest igjennom de, er for trøtt til å prøve no, men skal nok få gjort det imorgen. kommer sikkert med flere spørsmål hvis jeg ikke får det til Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå