Как посчитать пробелы в строке Java? - PullRequest
16 голосов
/ 11 марта 2012

Мне нужно посчитать количество пробелов в моей строке, но мой код выдает мне неправильное число при запуске, что не так?

Ответы [ 16 ]

29 голосов
/ 11 марта 2012

s.length() - s.replaceAll(" ", "").length() возвращает количество пробелов.

Есть и другие способы. Например "

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

и т. Д. И т. П.

В вашем случае вы пытались разбить строку, используя \t - TAB. Вы получите правильный результат, если будете использовать " ". Использование \s может вводить в заблуждение, поскольку оно соответствует всем пробелам - обычным пробелам и табуляциям.

18 голосов
/ 11 марта 2012

Вот другой способ взглянуть на это, и это простой однострочный:

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

Это работает, эффективно удаляя все не пробелы, затем беря длину того, что осталось (пробелы).

Возможно, вы захотите добавить нулевую проверку:

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

Обновление Java 8

Вы также можете использовать поток:

int spaces = s.chars().filter(c -> c == (int)' ').count();
3 голосов
/ 23 июня 2017

Если вы используете Java 8, должно работать следующее:

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

Это также будет работать в Java 8 с использованием Eclipse Collections :

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

Примечание: Я являюсь коммиттером для Eclipse Collections.

3 голосов
/ 11 марта 2012

Самый быстрый способ сделать это будет:

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

Это будет перехватывать все символы, которые считаются пробелами.

Решения Regex требуют компиляции регулярного выражения и его исключения - с большими накладными расходами.Получение массива символов требует выделения.Итерирование по байтовому массиву будет быстрее, но только если вы уверены, что ваши символы ASCII.

3 голосов
/ 11 марта 2012

\t будет соответствовать табуляциям, а не пробелам, и также должно указываться двойной косой чертой: \\t.Вы могли бы позвонить s.split( " " ), но это не считало бы последовательные пробелы.Под этим я подразумеваю ...

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

Итак, несмотря на то, что есть семь пробелов, остается только пять блоков пробела.Я полагаю, это зависит от того, что вы пытаетесь считать.

Commons Lang ваш друг для этого.

int count = StringUtils.countMatches( inputString, " " );
2 голосов
/ 11 марта 2012

Другой способ использования регулярных выражений

int length = text.replaceAll("[^ ]", "").length();
2 голосов
/ 11 марта 2012

Ваш код будет считать количество вкладок, а не количество пробелов.Также количество вкладок будет на одну меньше arr.length.

1 голос
/ 23 мая 2018

Простой и быстрый способ подсчета пробелов

 String fav="foo hello me hi";
for( int i=0; i<fav.length(); i++ ) {
        if(fav.charAt(i) == ' ' ) {
            counter++;
        }
    }
1 голос
/ 09 февраля 2013

проверьте следующий код, это может помочь

 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 голос
/ 11 марта 2012

Решение с использованием 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...