0
votes

Essayer d'imprimer un mot à partir d'une chaîne sur des lignes séparées

Je veux qu'il imprime chaque mot sur sa propre ligne.

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 8
at java.lang.String.charAt(String.java:658)
at MyProgram.main(MyProgram.java:34)

Cependant, je reçois cette erreur à chaque fois.

String movie = "10 Things I Hate About You";
    String g = "";
    for(int letter = 0; letter < movie.length(); letter++) {
        if(letter != ' ') {
            g += word.charAt(letter);
        }
        else {
            g += "\n";
        }
    }
    System.out.println(g);


2 commentaires

Quel est le word censé être? En outre, il devrait être movie.charAt(letter) != ' ' , Depuis la letter != ' ' Passe juste à chaque fois que la letter n'est pas 32 .


Pourquoi n'utilisez-vous pas string.split(" ") ?


6 Réponses :


0
votes
String movie = "10 Things I Hate About You";
StringBuilder g = new StringBuilder();
String g = "";
for(int letter = 0; letter < movie.length(); letter++) {
    if(word.charAt(letter) != ' ') {
        g.append(word.charAt(letter));
    }
    else {
        g.append("\n");
    }
}System.out.println(g);

0 commentaires

0
votes

Vous pouvez diviser la chaîne en un tableau et imprimer chaque élément de ce tableau dans une nouvelle ligne.

String movie = "One word per line";
String[] arrOfStr = movie.split(" ");
for(String s : arrOfStr){
    System.out.println(s);
} 


0 commentaires

1
votes

Vous devriez vérifier movie.charAt(letter) != ' ' Et si c'est true , vous devez ajouter movie.charAt(letter) à g .

10
Things
I
Hate
About
You

Production:

public class Main {
    public static void main(String[] args) {
        String movie = "10 Things I Hate About You";
        movie = movie.replace(' ', '\n');
        System.out.println(movie);
    }
}

Une solution bien plus simple:

10
Things
I
Hate
About
You

Production:

public class Main {
    public static void main(String[] args) {
        String movie = "10 Things I Hate About You";
        String g = "";
        for (int letter = 0; letter < movie.length(); letter++) {
            if (movie.charAt(letter) != ' ') {
                g += movie.charAt(letter);
            } else {
                g += "\n";
            }
        }
        System.out.println(g);
    }
}


0 commentaires

0
votes

Vous pouvez utiliser une expression régulière pour fractionner le tableau. Pas besoin de boucles pour vérifier les caractères individuels. Cela utilise le séparateur de ligne correspondant au système d'exploitation que vous utilisez.

String movie = "10 Things I Hate About You";
movie = movie.replaceAll(" ", System.getProperty("line.separator"));

System.out.println(movie);


0 commentaires

0
votes

Voici une seule ligne pour faire la même chose.

System.out.println(movie.replaceAll(" ", "\n"));


0 commentaires

0
votes

une ligne avec un lambda:

movie.codePoints().forEach( c
    -> System.out.print( c == ' ' ? '\n' : (char)c ) );

joining(…) fonctionne en interne avec un java.util.StringJoiner


â € ¦un lambda qui suit l'approche originale char par char :

System.out.print(
    Stream.of( movie.split( " " ) ).collect( Collectors.joining( "\n" ) )
 );


0 commentaires