Permalänk

reversera text-fil, Java

Jag har en textfil med några rader text som jag vill reversera med stringbuilder men jag får det inte att funka som jag vill.

Om filen ser ut så här:

1 abcd
2 ABCD
3 efgh

så vill jag att den ska bli reverserad till:

dcba 1
DCAB 2
hgfe 3

Men när jag använder koden så kommer raderna i fel ordning
.... 3
.... 2
.... 1

File reverseFile = new File(fileName); Scanner scan = new Scanner(reverseFile); StringBuilder sb = new StringBuilder(); while(scan.hasNextLine()){ sb.append(scan.nextLine()).reverse(); sb.append("\n"); } scan.close(); PrintWriter printWriter = new PrintWriter("testReverse.txt"); printWriter.print(sb); printWriter.close();

Permalänk
Medlem

@burton666:

Testa att ändra
sb.append(scan.nextLine()).reverse();
till:
sb.append(scan.nextLine().reverse());

Permalänk

Funkar tyvärr inte då scan.nextLine är en String och inte ett stringbuilder object

Permalänk
Medlem

@burton666:

sb.append(scan.nextLine()).reverse();

Här kör du reverse på din StringBuilder varje iteration i loopen, vilket inte var det du tänkt
Här ser du vad som händer med texten "test = {i}" där {i} motsvarar iterationen i loopen.

Iteration : 1 Stringbuilder: 0 = tset Iteration : 2 Stringbuilder: 1 = tset test = 0 Iteration : 3 Stringbuilder: 2 = tset 0 = tset test = 1 Resultat: 2 = tset 0 = tset test = 1

Exempelvis kan du skriva en egen metod som returnerar inmatad sträng baklänges eller testa vad Nissan8 skriver

sb.append(reverseString(scan.nextLine());

Permalänk
Medlem

@burton666:

I see. Men det är iallafall raden du vill reversa, inte hela alltet.
Har ingen Java-IDE installerad så har inte möjlighet att testa själv, men detta då?

while(scan.hasNextLine()){
sb.append(new StringBuilder(scan.nextLine()).reverse()); // eventuellt toString-a efter reverse
sb.append("\n");
}

Permalänk
Medlem

@burton666:

Makar ingen sense att det skall fungera;
Du skapar ett stringbuilder objekt, sedan lägger du på text och kör reverse som i sin tur gör reverse på allt i stringbuilder objektet. Detta sker då varje iteration.

Antingen skapar du en egen metod som kör reverse på strings som kör reverse innan du tar in varje rad till stringbuilder, eller tömmer den varje iteration och tilldelar den nya texten till någon lista/temp. eller så fulkodar du och skapar ett ny stringbuilder för varje iteration och tilldelar just den texten du vill reversa och skriver till en fil.

Göra det snyggt så läs in för varje rad, reversa per rad med en egen metod och sedan skriv till fil. Tråda inläsning/reverse om du är ricer.

Visa signatur

Arch - Makepkg, not war -||- Gigabyte X570 Aorus Master -||- GSkill 64GiB DDR4 14-14-15-35-1T 3600Mhz -||- AMD 5900x-||- Gigabyte RX6900XT -||- 2x Adata XPG sx8200 Pro 1TB -||- EVGA G2 750W -||- Corsair 570x -||- O2+ODAC-||- Sennheiser HD-650 -|| Boycott EA,2K,Activision,Ubisoft,WB,EGS
Arch Linux, one hell of a distribution.