Ранг хакера Java Строковые токены - PullRequest
0 голосов
/ 10 июля 2020

Я работаю над Java String Tokens на HackerRank. Мой код выглядит следующим образом:

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        // Write your code here.
        scan.close();
        // if length is 0
        if (s.length() == 0 || s == null) {
            System.out.println(0);
            return;
        }

        // It seems we need to remove some spaces
        s = s.trim();


        String[] words = s.split("[ |!|,|\\?|\\.|_|'|@|]+");
        System.out.println(words.length);

        for (String word: words){
            System.out.println(word);
        }

        
    }
}


Он прошел большинство тестов, но не прошел, когда ввод равен нулю. Я приложил скриншот к этому вопросу: введите описание изображения здесь

Итак, может ли кто-нибудь объяснить, что здесь произошло? И как это исправить? Спасибо вам огромное!

1 Ответ

0 голосов
/ 10 июля 2020

Regex "[ |!|,|\\?|\\.|_|'|@|]+" является посторонним.

  • Не разделяйте символы в классе символов [ ] шаблоном | OR , поскольку этот шаблон применяется только за пределами класса символов.

  • Нет необходимости экранировать ? и . в классе символов, поскольку они не являются специальными символами. .

Правильное регулярное выражение будет [ !,?._'@]+ или [^A-Za-z]+.

Основная проблема с кодом в вопросе заключается в том, что split() может возвращать массив, в котором первым элементом является пустая строка.

Пример 1: Ввод ",X," будет возврат ["", "X"]. Пустая строка перед начальным , включается, а пустая строка после конечного , исключается, потому что javado c говорит, что так : " Таким образом, завершающие пустые строки не включаются в результирующий массив ".

Пример 2: Input "" вернет [""], потому что javado c явно говорит об этом : «Если выражение не соответствует какой-либо части ввода, то результирующий массив имеет только один элемент, а именно эту строку» . Обратите внимание, что правило «конечной пустой строки» не применяется к этому конкретному варианту использования c.

Пример 3: Input ",," вернет [], потому что конечные пустые строки исключены.

В примерах 1 и 2 эту начальную пустую строку следует игнорировать.

Я оставлю фактическое исправление кода вам, поскольку это равно ваша задача, которую нужно решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...