我想将所有'.'
和' '
替换为'_'
但我不喜欢我的代码...
有一种比这更有效的方法:
String new_s = s.toLowerCase().replaceAll(" ", "_").replaceAll(".","_");
toLowerCase()就在那里,因为我想要它也更低......
答案 0 :(得分:68)
String new_s = s.toLowerCase().replaceAll("[ .]", "_");
编辑:
replaceAll
正在使用正则表达式,并且在字符类.
中使用[ ]
只能识别.
而不是任何字符。
答案 1 :(得分:11)
s.replaceAll("[\\s\\.]", "_")
答案 2 :(得分:4)
使用String#replace()
代替String#replaceAll()
,您不需要正则表达式来替换单字符。
我创建了以下类来测试更快的内容,试一试:
public class NewClass {
static String s = "some_string with spaces _and underlines";
static int nbrTimes = 10000000;
public static void main(String... args) {
long start = new Date().getTime();
for (int i = 0; i < nbrTimes; i++)
doOne();
System.out.println("using replaceAll() twice: " + (new Date().getTime() - start));
long start2 = new Date().getTime();
for (int i = 0; i < nbrTimes; i++)
doTwo();
System.out.println("using replaceAll() once: " + (new Date().getTime() - start2));
long start3 = new Date().getTime();
for (int i = 0; i < nbrTimes; i++)
doThree();
System.out.println("using replace() twice: " + (new Date().getTime() - start3));
}
static void doOne() {
String new_s = s.toLowerCase().replaceAll(" ", "_").replaceAll(".", "_");
}
static void doTwo() {
String new_s2 = s.toLowerCase().replaceAll("[ .]", "_");
}
static void doThree() {
String new_s3 = s.toLowerCase().replace(" ", "_").replace(".", "_");
}
}
我得到以下输出:
使用replaceAll()两次:100274
使用replaceAll()一次:24814
使用replace()两次:31642
当然,我没有对应用程序进行内存消耗分析,这可能会产生非常不同的结果。