J'ai une tâche de programmation et une partie de celle-ci nécessite que je crée un code qui lit une ligne de l'utilisateur et supprime tous les espaces vides de cette ligne. la ligne peut être composée d'un mot ou plus.
Ce que j'essayais de faire avec ce programme, c'est de le faire analyser chaque caractère jusqu'à ce qu'il trouve un espace, puis enregistrez cette sous-chaîne en tant que premier jeton. puis boucle à nouveau jusqu'à ce qu'il n'atteigne plus de jetons ou la fin de la ligne.
Je continue à l'obtenir lorsque j'essaie de le compiler:
Exception in thread "main" Java.lang.StringIndexOutOfBoundsException: String index out of range: 1
at Java.lang.String.charAt(String.Java:694)
at trim.main(trim.Java:23)
Voici le code
import Java.util.Scanner ;
import Java.lang.Character;
import Java.lang.String ;
public class trim
{
public static void main (String[]args)
{
String a ;
String b ;
String c ;
char aChar ;
int i = 0 ;
Scanner scan = new Scanner(System.in);
a = scan.nextLine();
a =a.trim() ;
for ( ; i >= 0 ; i++ )
{
aChar = a.charAt(i) ;
if (aChar != 32)
{
a = a.substring(0,i+1);
}
else
{
b = a.substring(i,160) ;
b= b.trim();
c = c + a ;
c = c.trim() ;
a = b ;
i = 0 ;
}
if (b.equals(null))
{
i = -1 ;
}
}
}
}
des moyens plus faciles de le faire sont appréciés, mais je veux toujours que ce programme fonctionne.
et je ne peux pas utiliser de sentinelles dans l'entrée.
Merci à tous pour toute l'aide,
Je vais utiliser la méthode la plus simple, et vais lire le javadoc.
Java.lang.String
la classe a la méthode substring
pas substr
, c'est l'erreur dans votre programme.
De plus, vous pouvez le faire en une seule ligne si vous utilisez bien l'expression régulière.
a.replaceAll("\\s+","");
Pourquoi ne pas utiliser une regex pour cela?
a = a.replaceAll("\\s","");
Dans le contexte d'une expression rationnelle, \s
supprimera tout ce qui est un caractère d'espace (y compris l'espace, les caractères de tabulation, etc.). Vous devez échapper la barre oblique inverse dans Java pour que l'expression régulière devienne \\s
. En outre, étant donné que les chaînes sont immuables, il est important d’attribuer la valeur de retour de l’expression régulière àa
.
La manière la plus intuitive de le faire sans utiliser literals
ou regular expressions
:
yourString.replaceAll(" ","");
Remplacez tous les espaces de la chaîne par un caractère vide.
String lineWithoutSpaces = line.replaceAll("\\s+","");
Essaye ça:
String str = "Your string with spaces";
str = str.replace(" " , "");
Essayer:
string output = YourString.replaceAll("\\s","")
s - indique un caractère d'espacement (tabulation, etc.)
package com.infy.test;
import Java.util.Scanner ;
import Java.lang.String ;
public class Test1 {
public static void main (String[]args)
{
String a =null;
Scanner scan = new Scanner(System.in);
System.out.println("*********White Space Remover Program************\n");
System.out.println("Enter your string\n");
a = scan.nextLine();
System.out.println("Input String is :\n"+a);
String b= a.replaceAll("\\s+","");
System.out.println("\nOutput String is :\n"+b);
}
}
public static String removeSpace(String s) {
String withoutspaces = "";
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != ' ')
withoutspaces += s.charAt(i);
}
return withoutspaces;
}
C'est la méthode la plus simple et la plus simple pour supprimer des espaces dans une chaîne.
Vous ne pouvez pas simplement utiliser String.replace ("", "");
Vous pouvez utiliser une expression régulière pour supprimer des espaces, essayez cet extrait:
Scanner scan = new Scanner(System.in);
System.out.println(scan.nextLine().replaceAll(" ", ""));
trim.Java:30: cannot find symbol
symbol : method substr(int,int)
location: class Java.lang.String
b = a.substr(i,160) ;
Il n'y a pas de méthode comme substr
dans la classe String.
utilisez la méthode String.substring ().
String a="string with multi spaces ";
//or this
String b= a.replaceAll("\\s+"," ");
String c= a.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ");
// ça marche bien avec tous les espaces
* N'oubliez pas l'espace dans Sting B