Проблема замены строки в Java - PullRequest
0 голосов
/ 27 апреля 2011

Я пытаюсь заменить URL сокращенным URL-адресом внутри строки:

public void shortenMessage()
    {
        String body = composeEditText.getText().toString();
        String shortenedBody = new String();
        String [] tokens = body.split("\\s");

        // Attempt to convert each item into an URL.  
        for( String token : tokens ) 
        {
            try
            {
                Url url = as("mycompany", "someapikey").call(shorten(token));
                Log.d("SHORTENED", token + " was shortened!");
                shortenedBody = body.replace(token, url.getShortUrl());
            }
            catch(BitlyException e)
            {
                //Log.d("BitlyException", token + " could not be shortened!");

            }
        }

        composeEditText.setText(shortenedBody);
        // url.getShortUrl() -> http://bit.ly/fB05
    }

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

Например:

"I like www.google.com" should be "I like [some shortened url]" after my code executes.

Ответы [ 2 ]

3 голосов
/ 27 апреля 2011

В Java строки неизменны.String.replace () возвращает новую строку, которая является результатом замены.Таким образом, когда вы делаете shortenedBody = body.replace(token, url.getShortUrl()); в цикле, shortenedBody будет содержать результат (только самой) последней замены.

Вот исправление с использованием StringBuilder.

0 голосов
/ 27 апреля 2011

Возможно, вы захотите String.replaceAll и Pattern.quote , чтобы "заключить в кавычки" вашу строку, прежде чем передать ее в replaceAll, который ожидает регулярное выражение.

...