Игнорировать пробелы при подсчете количества слов из значения, разделенного запятой

Вот пример

public static void main(String[] args) {
    System.out.println(add5(1));
}

public static int add5(int a) {
    return add5(a) + 5;
}

. StackOverflowError в основном - это когда вы пытаетесь что-то сделать, что, скорее всего, называет себя и продолжает бесконечность (или до тех пор, пока не даст StackOverflowError).

add5(a) будет вызывать себя, а затем снова называть себя и т. д.

0
задан Asdfg 13 July 2018 в 21:02
поделиться

5 ответов

Вы можете использовать эту единственную команду awk, которая использует разделитель полей запятой:

value="inst1,inst2,inst 3"
awk -F, '{print NF}' <<< "$value"

3

Существует альтернативное решение, использующее grep:

grep -oE '[^,]+' <<< "$value" | wc -l
4
ответ дан anubhava 17 August 2018 в 12:08
поделиться
  • 1
    +1, это должен быть принятый ответ. В основном это единственное решение, которое также будет корректно работать для value="" и value=,. – PesaThe 14 July 2018 в 18:24

С bash Добавьте запятую в конец значения, удалите каждую не запятую и получите длину.

cnt="${value//[^,]/},";echo "${#cnt}"
1
ответ дан ctac_ 17 August 2018 в 12:08
поделиться

Сначала замените место чем-то другим, затем сделайте то, что вы сделали. Например:

echo "$value" | tr ' ' '_' | tr ',' ' ' | wc -w
2
ответ дан Nic3500 17 August 2018 в 12:08
поделиться

Сохранение слов в массиве и вывод числа элементов:

IFS=, read -ra arr <<< "$value"; echo "${#arr[@]}"
4
ответ дан PesaThe 17 August 2018 в 12:08
поделиться

Вы можете использовать sed 's/ //g' для удаления любых пробелов в строке. Таким образом, полная команда будет:

echo "$value" | sed 's/ //g' | tr ',' ' ' | wc -w
2
ответ дан sripley 17 August 2018 в 12:08
поделиться