Передать SpannableString в функцию, вернуть SpannableString

Я использую фрагмент кода, который ищет в тексте SpannableString регулярное выражение и удаляет первый и последний символы любых экземпляров этого выражения — в данном случае текст, ограниченный [квадратными скобками].

На выходе должна быть та же SpannableString, но без скобок. например:

input: Text [that] looks [like this]
output: Text that looks like this

Однако я не могу получить правильный синтаксис для вызова функции и возврата текста в формате SpannableString.

Вот фрагмент кода, который выполняет преобразование:

public static CharSequence removeSquareBracketsFromText(CharSequence text) {

    SpannableStringBuilder outputText = new SpannableStringBuilder( text );

    if( pattern != null )
    {
        Matcher matcher = pattern.matcher( text );
        int matchesSoFar = 0;
        while( matcher.find() )
        {
            int start = matcher.start() - (matchesSoFar * 2);
            int end = matcher.end() - (matchesSoFar * 2);
            outputText.setSpan( text, start + 1, end - 1, 0 );
            outputText.delete(start, start + 1);
            outputText.delete(end - 2, end -1);
            matchesSoFar++;
        }
    }
    return outputText;
}

И когда я передаю SpannableString в функцию, я (пытаюсь) делаю это так:

SpannableString outputText= removeSquareBracketsFromText(inputText);

Я подозреваю, что ошибка в синтаксисе того, как я вызываю функцию, но я точно не знаю. Моя IDE (Eclipse) говорит мне, что ошибка в слове (removeSquareBraccketsFromText': «Несоответствие типов: невозможно преобразовать из CharSequence в SpannableString».

Любая помощь приветствуется. Как вы, наверное, заметили, я новичок в Java и привык к MATLAB, который обрабатывает преобразование типов переменных в фоновом режиме.


person CaptainProg    schedule 01.09.2012    source источник


Ответы (1)


Измените объявление метода на это:

public static SpannableString removeSquareBracketsFromText(CharSequence text) {

И измените заявление о возврате на это:

    return new SpannableString(outputText);
person Solubris    schedule 01.09.2012
comment
О, нет! Это удалило [квадратные скобки], но также потеряло все форматирование, которое у меня было в тексте. Могло ли это быть вызвано '.toString()'? Чтобы уточнить, SpannableString, который я загружаю (и должен выйти), содержит URL-ссылки. - person CaptainProg; 02.09.2012
comment
Да! Это было. Кажется, что оператор return не должен включать '.toString()'. Тогда он работает отлично (я отредактировал ваш ответ, чтобы отразить это) - person CaptainProg; 02.09.2012
comment
В этом случае вы, вероятно, захотите сохранить его как SpannableStringBuilder. Вы можете сделать это: textView.setText(ssb); - person Solubris; 02.09.2012