2016-04-12 9 views
1

Ich versuche, ein einfaches Programm zu machen, das Textdateien liest und bestimmte Daten daraus abruft. Im folgenden Code versuche ich eine Position zu bekommen, wo ich ein Zitat habe. Sagen wir also, File.txt Inhalte sind:Scanner und Teilzeichenfolge

aaaaaaa"bbbbb"ccccc 
ddd"ee"ffff 
g"hhhhhh"iii"gggg" 

Also sollte ich mit allen Positionen von Zitaten eine Array-Liste haben (al = [7, 13, 3, 6, 1, 8, 12, 17]). Das Problem ist, dass ich nicht scheinen kann, eine Teilstring aus jeder Zeile, die im Lesen von Text. Ich möchte den Text erhalten, der in Anführungszeichen steht. Ausgabe sollte in etwa so aussehen:

bbbbb 
ee 
hhhhhh 
gggg 

Code:

File temp = new File("file.txt"); 
Scanner file = new Scanner(temp); 
ArrayList<Integer> al = new ArrayList<Integer>(); 
while (file.hasNext()) { 
    String k = file.next(); 
    //System.out.println(k); 
    int position = 0; 
    while (position >= 0) { 
     position = k.indexOf('"', position + 1); 
     //System.out.println(position); 
     al.add(position); 
    } 
    System.out.println(k.substring(position,position+1)); 
} 
+0

Und was bekommen Sie mit Ihrem Programm ?, Was ist das Problem? –

+1

Wenn Sie die Strings innerhalb der Anführungszeichen haben wollen, sollten Sie Regex verwenden. – Jens

+0

Regex mit 'Pattern' und' Matcher' sollte nützlich sein, falls Sie mehr als 2 Quotesätze in Ihren Strings haben. Gibt es einen Grund, warum Sie Regex hier nicht benutzen? – TheLostMind

Antwort

0

Wenn Sie sind gut mit Regex wie oben vorgeschlagen, dann können Sie nur tun dies (vorausgesetzt, die Zitate öffnen und schließen sich in der gleichen Linie):

List<String> lines = Files.lines(Paths.get("files/input.txt")).collect(Collectors.toList()); 
    Pattern p = Pattern.compile("\"(.*?)\""); 
    for(String line : lines){ 
     Matcher m = p.matcher(line); 
     while(m.find()) 
      System.out.println(m.group(1).replaceAll("\"", "")); 
    } 

Ich hoffe, es hilft.