Split eine txt Datei in ein array und die Elemente innerhalb des Arrays
Hallo, grundsätzlich ist es mein Ziel, ist zu Lesen, dass ein txt
- Datei speichern Sie in einem array und Druck-array-element nach der Methode argument. die text-Datei ist formatiert angezeigt (ein Raum zwischen jeder string in einer Zeile)
alan 1000
lee 20
rodney 28
z.B. wenn mein argument war lee
sollte die Methode print aus 20
. Wenn rodney
dann 28
public class practice
{
public void dataReader(String fName, String pname)
{
try
{
FileReader fr=new FileReader(fName);
BufferedReader br=new BufferedReader(fr);
String[] a={};
String line= br.readLine();
while(line !=null)
{
a= line.split(" "); //deliminator white space
}
for(int i=0; i <a.length; i++)
{
if(a[i].equals(pname))
{
System.out.println(a[i]+1);
}
}
}
catch(IOException e)
{
}
}
- Verwenden Sie Formatierungen, Java-Klassen beginnen mit Großbuchstaben schreiben (Konvention)
- Wenn diese Hausaufgaben sollte es sein markiert als solcher.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code, den Sie geschrieben ist, nicht zu arbeiten, weil Sie immer nur Lesen der ersten Zeile, dann Schleife über die Linie forever.
Ihren code, gekürzt und kommentiert:
Müssen Sie rufen Sie
br.readLine()
in einer Schleife, bis es wieder null ist, so etwas wie dieses:Die for-Schleife in deinem original-code funktioniert nicht, wenn Sie jemals schlagen Sie Ihre Ausgabe wäre
lee1
oderrodney1
beziehungsweise. Wenn Sie es geändertarr[i+1]
statt, die ich nehme an, Sie versuchten zu tun, es würde Abstürzen mit einer IndexOutOfBoundsException, wenn überhaupt, das Letzte Element in dem array abgeglichenpname
.Orginal Antwort
Ist dies ein Idealer Anwendungsfall für eine Scanner. Es "scannt" einen string oder eine Datei für den Inhalt, die Sie suchen, drastisch Vereinfachung der Datei-Analyse für viele Anwendungsfälle, insbesondere Leerzeichen-getrennte Dateien.
Wenn Sie keinen scanner verwenden, um zu analysieren, jede Zeile, können Sie immer noch verwenden es zu vereinfachen, Lesen jeder Zeile, und dann tun, was immer komplexere Analyse der Linie getan werden muss, etwa so:
Als beiseite, wenn Sie wissen, die Namen eindeutig sein, können Sie eine Anzeigen (insbesondere ein HashMap) zum speichern von mappings und lookup-wie Namen zu zahlen effizient. Anstatt also eine Methode, die einen Dateinamen und einen Namen-lookup, Sie haben eine Methode, die die Datei analysiert und gibt eine Abbildung von alle Namen zu zahlen, dann rufen Sie einfach an
map.get("name")
auf die zurückgegebene Karte, um eine bestimmte person die Nummer effizient, ohne re-read die Datei jedes mal.Sollten Sie ein Dictionary-Objekt
Auf die Reihe bekommen, Sie einfach nachschlagen im Wörterbuch, indem Sie die Taste name.
int
im Allgemeinen, müssen Sie die Verwendung der wrapper-KlasseInteger
.String.split()
in meiner Antwort.