0
    String weatherLocation = weatherLoc[1].toString();
weatherLocation.replaceAll("how","");
weatherLocation.replaceAll("weather", "");
weatherLocation.replaceAll("like", "");
weatherLocation.replaceAll("in", "");
weatherLocation.replaceAll("at", "");
weatherLocation.replaceAll("around", "");
test.setText(weatherLocation);

weatherLocation 仍然包含“like in”

4

4 回答 4

12

字符串是不可变的。String#replaceAll()方法将创建一个新字符串。您需要将结果重新分配给变量:

weatherLocation = weatherLocation.replaceAll("how","");

现在,由于该replaceAll方法返回修改后的字符串,您还可以replaceAll在一行中链接多个调用。事实上,这里不需要replaceAll()。当您要替换匹配正则表达式模式的子字符串时,它是必需的。简单的使用String#replace()方法:

weatherLocation = weatherLocation.replace("how","")
                                 .replace("weather", "")
                                 .replace("like", "");
于 2013-06-25T11:39:13.623 回答
6

正如 Rohit Jain 所说,字符串是不可变的;在您的情况下,您可以链接呼叫replaceAll以避免多重影响。

String weatherLocation = weatherLoc[1].toString()
        .replaceAll("how","")
        .replaceAll("weather", "")
        .replaceAll("like", "")
        .replaceAll("in", "")
        .replaceAll("at", "")
        .replaceAll("around", "");
test.setText(weatherLocation);
于 2013-06-25T11:41:19.477 回答
2

正如 Rohit Jain 所说,而且,由于 replaceAll 采用正则表达式,而不是链接调用,您可以简单地执行类似的操作

test.setText(weatherLocation.replaceAll("how|weather|like|in|at|around", ""));
于 2013-06-25T12:14:24.557 回答
1

我认为如果您需要替换文本中的大量字符串,最好使用StringBuilder/ 。StringBuffer为什么?正如 Rohit Jain 所写String的那样,它是不可变的,因此每次调用replaceAll方法都需要创建新对象。不像String, StringBuffer/StringBuilder是可变的,所以它不会创建新对象(它将在同一个对象上工作)。

例如,您可以在本 Oracle 教程http://docs.oracle.com/javase/tutorial/java/data/buffers.html中阅读有关 StringBuilder 的信息。

于 2013-06-25T11:47:15.007 回答