Как посчитать слово с апострофом как два отдельных слова, используя регулярные выражения Java

java regex

431 просмотра

4 ответа

У меня есть строка, в которой есть слово с апострофом. Экс, он очень хороший мальчик, не так ли?

public class Solution {

      public static void main(String[] args) {

           String s = "He is a very very good boy, isn't he?";
           String[] words = s.split("\\s+");
           int itemCount = words.length;
           System.out.println(itemCount);

           for (int i = 0; i < itemCount; i++) {
                String word = words[i];
                System.out.println(word);
           }
     }
}

Вывод, который я получаю, составляет 9 слов. Но я хочу считать как 10, отделяя не как 2 слова. Как это сделать, используя приведенное выше регулярное выражение?

Автор: Protagonist Источник Размещён: 08.11.2019 10:57

Ответы (4)


1 плюс

Было бы надежнее использовать \wконструкцию:

Pattern p = Pattern.compile("(\\w)+");
Matcher m = p.matcher("He is a very very good boy, isn't he?");
while (m.find()) {
    System.out.println(m.group(0));
}

В противном случае вам придется вручную обрабатывать слишком много ситуаций, например: «Он очень хороший мальчик. Не так ли?».

Автор: Andrew Lygin Размещён: 20.08.2016 06:44

0 плюса

Вы можете попробовать использовать p {Punct}, который игнорирует такие символы, как?!

        String s = "He is a very very good boy, isn't he?";
        String[] words = s.split("[\\p{Punct}\\s]+");
        int itemCount = words.length;
        System.out.println(itemCount);
        for (int i = 0; i < itemCount; i++) {
            String word = words[i];
            System.out.println(word);
        }
Автор: Ashish Patil Размещён: 20.08.2016 09:48

0 плюса

Разделить на несловесные символы:

String[] words = s.split("\\W+")
Автор: Bohemian Размещён: 20.08.2016 12:33

0 плюса

Я думаю, что вы хотите isn'tбыть is notи поэтому посчитайте их как 2 отдельных слова, а не как одно.

Вы можете иметь или ( |) в разделенном регулярном выражении,

\\s+|'t

Это будет только для 'tи будет избегать считать за предложение, как my friend's birthday..здесь апостроф не следует рассматривать как другое слово.

Но это не только конец истории. Есть много других сокращений, которые следует учитывать в таком выражении.

т.е.

  • т : нет, нет, не было, не было, не будет и т.д.
  • s : это, это и т. д. (это сложно)
  • D : Я бы, ты и т. д.
  • «LL : Я буду, они будут и т.д. ...

Поэтому в конечном итоге регулярное выражение решит 90% проблем с подсчетом слов.

\\s+|'t|'d|'ll

Проблема с 's(апостроф S) состоит в том, что он идет с предметом, таким как Собака, Кошка и т. Д., Который показывает одержимость, и их не следует рассматривать как два отдельных слова. С другой стороны, какое-то время мы используем 'sдля написания «Есть», «То есть », «Это» и т. Д. Вы можете добавить выражения в существующее регулярное выражение, чтобы различать сокращения и апостроф, который показывает обладание.

Примечание: это только для подсчета слов, и оно будет разделено isn'tкак isnи ( пробел ) 'tбудет удален.

Автор: CoderCroc Размещён: 20.08.2016 06:36
Вопросы из категории :
32x32