# IO-Streams, Text einlesen und alle Wörter mit Großbuchstaben ausgeben



## lennero (11. Jun 2017)

Hallo. Ich möchte ein Programm schreiben welches einen beliebigen Text einliest (ohne nutzung von Scanner) und jedes Wort, welches mit Großbuchstaben beginnt, in eine LinkedList speichert und anschließend ausgibt. In Zeile 40 wird allerdings ein StringIndexOutOfBoundsException ausgeworfen und ich komme nicht drauf wieso ... Könnte mir jemand helfen ?


```
package aufgabe2;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.LinkedList;

public class UpLetters {
  
    public static void main(String[]args) throws IOException{
      
        BufferedReader br = new BufferedReader(new FileReader("C:/Users/AID21/Desktop/zitate.xml"));
        LinkedList<String> xyz = new LinkedList<String>();
      
        String h = null;
        String[] h2;
      
        while((h=br.readLine())!=null){
          
                h2 = h.substring(0, h.length()-1).split(" ");
                for(int i =0;i<h2.length;i++){
                  
                  
                        xyz.add(h2[i]);
                      
                  
                }
              
              
          
          
          
        }
      
        for(int i=0;i<xyz.size();i++){
          
                if(Character.isUpperCase(xyz.get(i).charAt(0))){
                    System.out.println(xyz.get(i));
              
            }
        }
      
      
      
      
        br.close();
  
      
      
    }

}
```


----------



## Flown (11. Jun 2017)

Poste doch mal deine Beispieldatei dazu.


----------



## lennero (14. Jun 2017)

Flown hat gesagt.:


> Poste doch mal deine Beispieldatei dazu.



Ich kann die Datei nicht hochladen aber hier ist mal ein kleiner Ausschnitt :


```
<sammlung>
  <person>
    <name>Hermann Josef Abs</name>
    <beschreibung>deutscher Bankier (1901 - 1994)</beschreibung>
    <zitat>Eine Million Steuerzahler verhalten sich vernünftiger als eine öffentliche Hand.</zitat>
    <zitat>Gewinn ist so notwendig wie die Luft zum Atmen, aber es wäre schlimm, wenn wir nur wirtschafteten, um Gewinne zu machen, wie es schlimm wäre, wenn wir nur lebten, um zu atmen.</zitat>
  </person>
  <person>
    <name>Dean Acheson</name>
    <beschreibung>amerikanischer Politiker (1893 - 1971)</beschreibung>
    <zitat>Das beste an der Zukunft ist vielleicht der Umstand, daß immer nur ein Tag auf einmal kommt.</zitat>
  </person>
  <person>
    <name>Douglas Adams</name>
    <beschreibung>britischer Schriftsteller (geb. 1952)</beschreibung>
    <zitat>Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau herausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch noch etwas Bizarreres und Unbegreiflicheres ersetzt. - Es gibt eine andere Theorie, nach der das schon passiert ist.</zitat>
    <zitat>Die Menschen werden geboren, die Menschen sterben, und die Zeit dazwischen verbringen sie mit dem Tragen der Digitaluhren.</zitat>
    <zitat>Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, daß sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, daß es unmöglich zerlegt oder repariert werden kann.</zitat>
  </person>
  <person>
    <name>John Adams</name>
    <beschreibung>amerikanischer Politiker, 2. Präsident der USA (1735 - 1826)</beschreibung>
    <zitat>Während alle anderen Wissenschaften weiter fortgeschritten sind, ist die der Staatsführung zum Stillstand gekommen. Man versteht und praktiziert sie jetzt nur etwas besser als vor viertausend Jahren.</zitat>
  </person>
  <person>
    <name>Konrad Adenauer</name>
    <beschreibung>deutscher Politiker (1876 - 1967)</beschreibung>
    <zitat>Nehmen Sie die Menschen, wie sie sind, an
```


----------



## fhoffmann (14. Jun 2017)

Möglicherweise enthält xyz auch leere Wörter (weil zwei Leerzeichen hintereinanderstehen), sodass charAt(0) zu der Exception führt.


----------



## Flown (14. Jun 2017)

Du weißt schon, dass das eine XML Datei ist und die evtl. geparst werden muss.

```
class UpLetters {

  public static void main(String[] args) {

    String s = "<sammlung>\n" +
      "  <person>\n" +
      "    <name>Hermann Josef Abs</name>\n" +
      "    <beschreibung>deutscher Bankier (1901 - 1994)</beschreibung>\n" +
      "    <zitat>Eine Million Steuerzahler verhalten sich vernünftiger als eine öffentliche Hand.</zitat>\n" +
      "    <zitat>Gewinn ist so notwendig wie die Luft zum Atmen, aber es wäre schlimm, wenn wir nur wirtschafteten, um Gewinne zu machen, wie es schlimm wäre, wenn wir nur lebten, um zu atmen.</zitat>\n" +
      "  </person>\n" +
      "  <person>\n" +
      "    <name>Dean Acheson</name>\n" +
      "    <beschreibung>amerikanischer Politiker (1893 - 1971)</beschreibung>\n" +
      "    <zitat>Das beste an der Zukunft ist vielleicht der Umstand, daß immer nur ein Tag auf einmal kommt.</zitat>\n" +
      "  </person>\n" +
      "  <person>\n" +
      "    <name>Douglas Adams</name>\n" +
      "    <beschreibung>britischer Schriftsteller (geb. 1952)</beschreibung>\n" +
      "    <zitat>Es gibt eine Theorie, die besagt, wenn jemals irgendwer genau herausfindet, wozu das Universum da ist und warum es da ist, dann verschwindet es auf der Stelle und wird durch noch etwas Bizarreres und Unbegreiflicheres ersetzt. - Es gibt eine andere Theorie, nach der das schon passiert ist.</zitat>\n" +
      "    <zitat>Die Menschen werden geboren, die Menschen sterben, und die Zeit dazwischen verbringen sie mit dem Tragen der Digitaluhren.</zitat>\n" +
      "    <zitat>Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, daß sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, daß es unmöglich zerlegt oder repariert werden kann.</zitat>\n" +
      "  </person>\n" +
      "  <person>\n" +
      "    <name>John Adams</name>\n" +
      "    <beschreibung>amerikanischer Politiker, 2. Präsident der USA (1735 - 1826)</beschreibung>\n" +
      "    <zitat>Während alle anderen Wissenschaften weiter fortgeschritten sind, ist die der Staatsführung zum Stillstand gekommen. Man versteht und praktiziert sie jetzt nur etwas besser als vor viertausend Jahren.</zitat>\n" +
      "  </person>\n" +
      "  <person>\n" +
      "    <name>Konrad Adenauer</name>\n" +
      "    <beschreibung>deutscher Politiker (1876 - 1967)</beschreibung>\n" +
      "    <zitat>Nehmen Sie die Menschen, wie sie sind, an";

    List<String> xyz = new ArrayList<>();
    try (BufferedReader br = new BufferedReader(new StringReader(s))) {
      String line;

      while ((line = br.readLine()) != null) {
        for (String word : line.split("\\s+")) {
          if (!word.isEmpty() && Character.isUpperCase(word.charAt(0))) {
            xyz.add(word);
          }
        }
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    xyz.forEach(System.out::println);
  }
}
```


----------

