17. februar 2012 - 14:39Der er
8 kommentarer og 1 løsning
StringIndexOutOfBoundsException
Hej Eksperten.
Jeg har en kode paa omkring 300 linjer som laeser en fil og tjekker for nogle noegleord i teksten. Den burden saavidt jeg kan se virke efter hensigten. Dog er naar koden koeres sker der en StringIndexOutOfBoundsException. Den fejl sker, mens filen bliver laest i en while loekke, hvor den String som den er gal med ogsaa for tilegnet sin vaerdi. Gaeldende linjer ser saaledes ud:
String fileInfo = new String(); StringBuffer buffRText = new StringBuffer(fileInfo) StringBuffer myFileString[] = new StringBuffer[1000000]; StringBuffer absFileLineString = new StringBuffer(); String absFileLineSmallSubstring = new String();
int incrChecker2 = 0;
myFile = new File(args[0]); newFile = new File(args[1]);
BufferedReader myBuffR = new BufferedReader(new FileReader(myFile));
bah mig og min maade at fremlaegge dele af en kode paa.. Her kommer den med alle inkluderede data.
String fileInfo = new String(); StringBuffer buffRText = new StringBuffer(fileInfo); StringBuffer myFileString[] = new StringBuffer[1000000]; StringBuffer absFileLineString = new StringBuffer(); String absFileLineSubstring = new String(); int absFileLineSubstringInt = 0; String absFileLineSmallSubstring = new String(); int incrFileLineCheck = 0;
myFile = new File(args[0]);
BufferedReader myBuffR = new BufferedReader(new FileReader(myFile));
Mistaenker at myFileString bliver nulstillet, efter while loekken er faerdig & at det er grunden til at absFileString referer til data som er null. Jeg er dog ikke helt sikker.
Synes godt om
Slettet bruger
17. februar 2012 - 20:28#4
Hvis den var null, ville du få en NullPointerException. Den eneste måde du kan få den fejl, er som arne allerede har kommenteret.
Fejlen ligger åbenbart i, at de første 30-40 gange myBuffR læser en linje, er den null. Selvom der filen som bliver læst har bogstaver skrevet, er myBuffR/myFileString null.
Jeg har lavet nogle control flow statements, som tjekker om pågældende nummer i myFileString[] er null. Så nu bliver filen læst & skrevet uden fejl-meddelser.
Selvom fejlen på en måde er rettet, har jeg ikke rettet roden til problemet om man så må sige. Jeg håber der er en som kan.
Synes godt om
Slettet bruger
18. februar 2012 - 23:20#6
Den viste kode giver ikke mening. I din while-loop læser du en linje ind i fileInfo, men du bruger den ikke til noget. Og for hver linje du læser, sætter du et index i myFileString til at pege på den samme buffRText.
I stedet for at lave et array med plads til 1000000 elementer, ville det være bedre at bruge ArrayList.
Jeg ser i øvrigt ingen grund til du bruger StringBuffers i dit kode eksempel, da du ville kunne klare dig med Strings.
Din for-loop løber alle 1000000 elementer igennem, og med mindre du har læst 1000000 linjer ind i myFileString fra din fil, så vil de sidste være null.
Din brug af indexOf giver heller ikke mening, da du sætter den til at søge fra index incrFileLineCheck. Jeg ville tro dette var grunden til du fik StringIndexOutOfBoundsException.
Måske ville du kunne klare dig uden en for-loop, og nøjes med din while-loop uden at skulle indlæse hele filen i myFileString, men det kommer nok an på hvad formålet med din kode er.
Jeg vil gerne foretrække for for-loop frem for while-loop, ellers bruger jeg bare en incrFileLineCheck++ ved slutningen af loop'en.
koden er ændret til, at indexOf tjekker nuværende linje med en for-loop.
Der er nu en while-loop, som læser hver linje i filen, & en tæller som stiger for hver linje, så myFileString har nu en størrelse på filens antal linjer.
Der bruges StringBuffers da den læste filen skal redigeres med StringBuffer.add/replace.
Hej Eksperten. Undskyld for inaktiviteten, men vil gerne give points til arne da svaret er rigtigt. Jeg har ikke koden længere og kan derfor ikke finde løsningen på problemet.
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.