Enlight Designe Postad Augusti 27, 2013 Dela Postad Augusti 27, 2013 Hej ! har en text fil som ska läsas in och skrivas ut på konsolen använder eclipse . här är koden som jag har nu som är inne i en metod public void lasFil() throws IOException{ sc = new Scanner (new File("resor.txt")); while (sc.hasNext()){ id = sc.nextInt(); km = sc.nextInt(); min = sc.nextInt(); if (km >20 & min <= 60 ){ System.out.printf("%s %s %s ", id, km, min); } } } text filen som heter "resor.txt" finns och ser ut så här problemet uppstår när detta tecken kommer upp ";" frågan är då hur kan man säga till Scanner'n att det är här du ska gå till nästa rad eller hoppa över dessa tecken ? 1;53;38 2;28;27 3;39;72 4;12;30 5;21;35 OBS programmet fungerar bra när text filen ser ut så här 1 53 38 2 28 27 3 39 72 4 12 30 5 21 35 6 19 32 6;19;32 Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Venoms Postad Augusti 27, 2013 Dela Postad Augusti 27, 2013 Hittade detta.. kan det vara något.. läs den nedre halvan.. http://www.eclipseonetips.com/2010/02/22/place-a-semicolon-at-the-end-of-a-java-statement-in-eclipse/ Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
jalec Postad Augusti 30, 2013 Dela Postad Augusti 30, 2013 Hej! Med metoden useDelimiter kan du få Scannern att hoppa över det du vill. Gjorde om din kod till ett litet fristående program, så här: import java.util.Scanner; import java.io.*; class LasFil { public static void main(String[] args) throws FileNotFoundException{ int id, km, min; Scanner sc = new Scanner (new File("resor.txt")); sc.useDelimiter("[; *|\n|\r]+"); while (sc.hasNext()){ id = sc.nextInt(); km = sc.nextInt(); min = sc.nextInt(); if (km >20 & min <= 60 ){ System.out.printf("%s %s %s ", id, km, min); } } } } Kört på dina data, med semikolon, blir resultatet det här: 1 53 38 2 28 27 5 21 35 Det var så här du menade, eller? Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Enlight Designe Postad Augusti 30, 2013 Författare Dela Postad Augusti 30, 2013 Hej! Med metoden useDelimiter kan du få Scannern att hoppa över det du vill. Gjorde om din kod till ett litet fristående program, så här: import java.util.Scanner; import java.io.*; class LasFil { public static void main(String[] args) throws FileNotFoundException{ int id, km, min; Scanner sc = new Scanner (new File("resor.txt")); sc.useDelimiter("[; *|\n|\r]+"); while (sc.hasNext()){ id = sc.nextInt(); km = sc.nextInt(); min = sc.nextInt(); if (km >20 & min <= 60 ){ System.out.printf("%s %s %s ", id, km, min); } } } } Kört på dina data, med semikolon, blir resultatet det här: 1 53 38 2 28 27 5 21 35 Det var så här du menade, eller? Hej nice ! det var typ en sådan lösningen jag var ute efter men att ID kommer först sen kommer km och min sen sker radbrytningen ska läsa lite om sc.useDelimiter(); har inte riktigt förstått hur den arbetar. jag löste det på detta sätt import java.io.*; import java.util.*; public class huvudapp { private String strID, strKM , strMIN ; private int i; public void lasFil()throws IOException{ Scanner sc = new Scanner (new File ("resor.txt")); while (sc.hasNextLine()){ String line = sc.nextLine(); String [] arr = line.split(";"); strID = arr[0]; int id = Integer.parseInt(strID); strKM = arr[1]; int km = Integer.parseInt(strKM); strMIN = arr[2] ; int min = Integer.parseInt(strMIN); if (km>20 & min<60){ System.out.print("ID:"+id+" MIN:"+min+" KM:"+km +"\n"); i++; } }System.out.println(i+" persons that made the if statment"); } public static void main(String[] args) throws IOException { huvudapp mt = new huvudapp (); mt.lasFil(); } } Utskriften ID:1 MIN:38 KM:53 ID:2 MIN:27 KM:28 ID:5 MIN:35 KM:21 3 persons that made the if statment Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
jalec Postad September 1, 2013 Dela Postad September 1, 2013 Hej igen! Ja, det där var smart, att lägga raden i en Array och sen splitta den. Jag kom på en till lösning, med en liten enklare useDelimiter() och en nextLine(), så här: import java.util.Scanner; import java.io.*; class LasFilx { public static void main(String[] args) throws FileNotFoundException{ int id, km, min; Scanner sc = new Scanner (new File("resor.txt")); sc.useDelimiter("[; ]"); while (sc.hasNext()){ id = sc.nextInt(); km = sc.nextInt(); min = sc.nextInt(); sc.nextLine(); if (km >20 & min <= 60 ){ System.out.println(); System.out.printf("%s %s %s ", id, km, min); } } } } och så här blir det när man kör det: 1 53 38 2 28 27 5 21 35 och semikolonen är borta! Citera Länk till kommentar Dela på andra webbplatser Fler delningsalternativ...
Recommended Posts
Delta i dialogen
Du kan skriva svaret nu och registrera dig senare, Om du har ett konto, logga in nu för att svara på inlägget.