web-dev-qa-db-fra.com

comment compter les espaces dans une chaîne Java?

J'ai besoin de compter le nombre d'espaces dans ma chaîne, mais mon code me donne un mauvais numéro lorsque je l'exécute.

 int count=0;
    String arr[]=s.split("\t");
    OOPHelper.println("Number of spaces are: "+arr.length);
    count++;
15
kamweshi

s.length() - s.replaceAll(" ", "").length() vous renvoie le nombre d'espaces.

Il y a plus de façons. Par exemple"

int spaceCount = 0;
for (char c : str.toCharArray()) {
    if (c == ' ') {
         spaceCount++;
    }
}

etc.

Dans votre cas, vous avez essayé de scinder la chaîne en utilisant \t - TAB. Vous obtiendrez un résultat correct si vous utilisez plutôt " ". Utiliser \s peut être déroutant, car il correspond à tous les espaces blancs - espaces normaux et tabulations. 

27
AlexR

Voici une autre façon de voir les choses, et il s’agit d’une simple ligne:

int spaces = s.replaceAll("[^ ]", "").length();

Cela fonctionne en supprimant efficacement tous les non-espaces puis en prenant la longueur de ce qui reste (les espaces).

Vous voudrez peut-être ajouter une vérification nulle:

int spaces = s == null ? 0 : s.replaceAll("[^ ]", "").length();

Mise à jour Java 8

Vous pouvez aussi utiliser un flux:

int spaces = s.chars().filter(c -> c == (int)' ').count();
14
Bohemian

\t correspondra à des tabulations, plutôt que des espaces et devrait également être référencé avec un double slash: \\t Vous pouvez appeler s.split( " " ) mais cela ne comptera pas les espaces consécutifs. Je veux dire par là ...

String bar = " ba jfjf jjj j   ";
String[] split = bar.split( " " );
System.out.println( split.length ); // Returns 5

Donc, malgré le fait qu'il y ait sept caractères d'espace, il n'y a que cinq blocs d'espace. Cela dépend de ce que vous essayez de compter, je suppose.

Commons Lang est votre ami pour celui-ci.

int count = StringUtils.countMatches( inputString, " " );
3
chooban

Le moyen le plus rapide de le faire serait:

int count = 0;
for(int i = 0; i < str.length(); i++) {
     if(Character.isWhitespace(str.charAt(i))) count++;
}

Cela intercepterait tous les caractères considérés comme des espaces. 

Les solutions de regex nécessitent la compilation de regex et son exécution - avec beaucoup de temps système. Obtenir un tableau de caractères nécessite une allocation. Itérer sur un tableau d'octets serait plus rapide, mais seulement si vous êtes sûr que vos caractères sont en ASCII. 

3

Si vous utilisez Java 8, les opérations suivantes devraient fonctionner:

long count = "0 1 2 3 4.".chars().filter(Character::isWhitespace).count();

Cela fonctionnera également avec Java 8 avec Eclipse Collections :

int count = CharAdapter.adapt("0 1 2 3 4.").count(Character::isWhitespace);

Remarque: je suis un partisan des collections Eclipse.

2
Donald Raab

Une autre façon en utilisant des expressions régulières

int length = text.replaceAll("[^ ]", "").length();
2
Peter Lawrey

Votre code comptera le nombre d'onglets et non le nombre d'espaces. En outre, le nombre d'onglets sera un de moins que arr.length.

2
nikhil500

Une solution utilisant Java.util.regex.Pattern/Java.util.regex.Matcher

String test = "foo bar baz ";
Pattern pattern = Pattern.compile(" ");
Matcher matcher = pattern.matcher(test);
int count = 0;
while (matcher.find()) {
    count++;
}
System.out.println(count);
1
Adam

s'il vous plaît vérifier le code suivant, il peut aider 

 public class CountSpace {

    public static void main(String[] args) {

        String Word = "S N PRASAD RAO";
        String data[];int k=0;
        data=Word.split("");
        for(int i=0;i<data.length;i++){
            if(data[i].equals(" ")){
                k++;
            }

        }
        System.out.println(k);

    }
}
1
S N Prasad Rao

Le code que vous avez fourni serait d'imprimer le nombre d'onglets, pas le nombre d'espaces. La fonction ci-dessous devrait compter le nombre de caractères d'espacement dans une chaîne donnée.

int countSpaces(String string) {
    int spaces = 0;
    for(int i = 0; i < string.length(); i++) {
        spaces += (Character.isWhitespace(string.charAt(i))) ? 1 : 0;
    }
    return spaces;
}
1
Kurt Kaylor
public static void main(String[] args) {
    String str = "Honey   dfd    tEch Solution";
    String[] arr = str.split(" ");
    System.out.println(arr.length);
    int count = 0;
    for (int i = 0; i < arr.length; i++) {
        if (!arr[i].trim().isEmpty()) {
            System.out.println(arr[i]);
            count++;
        }
    }
    System.out.println(count);
}
0
UTKAL

Je devais faire quelque chose de semblable à ceci et voici ce que j'ai utilisé:

String string = stringValue;
String[] stringArray = string.split("\\s+");
int length = stringArray.length;
System.out.println("The number of parts is: " + length);
0
James Drinkard
public static void main(String[] args) {  
Scanner input= new Scanner(System.in);`

String data=input.nextLine();
int cnt=0;
System.out.println(data);
for(int i=0;i<data.length()-1;i++)
{if(data.charAt(i)==' ')
    {
        cnt++;
    }
}

System.out.println("Total number of Spaces in a given String are " +cnt);
}
0
HSN

Le moyen le plus précis et le plus rapide et le plus rapide d'y parvenir est:

String Name="Infinity War is a good movie";

    int count =0;

    for(int i=0;i<Name.length();i++){
    if(Character.isWhitespace(Name.charAt(i))){
    count+=1;
        }
    }

    System.out.println(count);
0
Sahil Nagpal

Ce programme va certainement vous aider.

class SpaceCount
{

    public static int spaceCount(String s)
    { int a=0;
        char ch[]= new char[s.length()];
        for(int i = 0; i < s.length(); i++) 

        {  ch[i]= s.charAt(i);
            if( ch[i]==' ' )
            a++;
                }   
        return a;
    }


    public static void main(String... s)
    {
        int m = spaceCount("Hello I am a Java Developer");
        System.out.println("The number of words in the String are :  "+m);

    }
}
0
Ravinder Dhiman

Le moyen le plus simple et le plus rapide de compter les espaces

 String fav="foo hello me hi";
for( int i=0; i<fav.length(); i++ ) {
        if(fav.charAt(i) == ' ' ) {
            counter++;
        }
    }
0