【问题标题】:Problem replacing a String in Java在Java中替换字符串的问题
【发布时间】:2011-04-27 17:05:27
【问题描述】:

我正在尝试用字符串中的缩短 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.

【问题讨论】:

  • EditText 打印什么?

标签: java android string android-edittext bit.ly


【解决方案1】:

在 Java 中,字符串是不可变的。 String.replace() 返回一个新字符串,它是替换的结果。因此,当您在循环中执行 shortenedBody = body.replace(token, url.getShortUrl()); 时,shortenedBody 将保存(仅)最后一次替换的结果。

这是一个修复,使用 StringBuilder。

public void shortenMessage()
{
    String body = composeEditText.getText().toString();
    StringBuilder shortenedBody = new StringBuilder();
    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.append(url.getShortUrl()).append(" ");
        }
        catch(BitlyException e)
        {
            //Log.d("BitlyException", token + " could not be shortened!");

        }
    }

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

【讨论】:

  • 谢谢。这是一个很大的进步。缩短的 URL 显示在 EditText 中,但未打印字符串的其余部分。例如:“我喜欢 www.google.com”将只打印缩短的 URL。如何打印“我喜欢 [这里的短网址]”?
【解决方案2】:

您可能希望String.replaceAllPattern.quote 在将字符串传递给replaceAll 之前“引用”它,replaceAll 需要一个正则表达式。

【讨论】:

  • 无关;在任何地方的问题中都没有“replaceAll”
猜你喜欢
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2010-10-04
  • 2015-10-11
  • 2011-11-24
  • 1970-01-01
相关资源
最近更新 更多