Подтвердить что ты не робот

Как считать пробелы в строке java?

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

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

Ответ 1

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

Есть больше способов. Например,

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

и т.д. и т.д.

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

Ответ 2

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

int spaces = s.length() - s.replace(" ", "").length();

Это работает, потому что он эффективно вычитает количество символов, которые не являются пробелами из общей длины. Вы можете добавить нулевую проверку:

int spaces = s == null ? 0 : s.length() - s.replace(" ", "").length();

Обратите внимание, что использование replace(), которое быстрее, чем replaceAll().


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

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

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

Ответ 3

\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, " " );

Ответ 4

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

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

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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

Ответ 8

Приведенный вами код будет печатать количество вкладок, а не количество пробелов. Функция ниже должна подсчитывать количество пробельных символов в заданной строке.

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;
}

Ответ 9

Решение с использованием 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);

Ответ 10

открытый класс 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);

}

}

Ответ 11

Мне просто нужно было сделать что-то похожее на это, и это то, что я использовал:

String string = stringValue;
String[] stringArray = string.split("\\s+");
int length = stringArray.length;
System.out.println("The number of parts is: " + length);

Ответ 12

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);
}

Ответ 13

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);
}

Ответ 14

Эта программа определенно поможет вам.

класс 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);

}

}