我想換掉所有帶有'_'
字符串:如何用單個字符替換多個可能的字符?
'.'
和' '
,但我不喜歡我的代碼...
有沒有更有效的方法來做到這一點比:
String new_s = s.toLowerCase().replaceAll(" ", "_").replaceAll(".","_");
?
toLowerCase()就在那裏,因爲我希望它小寫,以及...
我想換掉所有帶有'_'
字符串:如何用單個字符替換多個可能的字符?
'.'
和' '
,但我不喜歡我的代碼...
有沒有更有效的方法來做到這一點比:
String new_s = s.toLowerCase().replaceAll(" ", "_").replaceAll(".","_");
?
toLowerCase()就在那裏,因爲我希望它小寫,以及...
String new_s = s.toLowerCase().replaceAll("[ .]", "_");
編輯:
replaceAll
使用正則表達式,並使用.
字符類[ ]
剛認識內部一個.
而不是任何字符。
使用String#replace()
而不是String#replaceAll()
,您不需要單字符替換的正則表達式。
我創建了下面的類來測試什麼是速度更快,不妨一試:使用100274
:
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()兩次replaceAll()once:24814
使用replace()兩次:31642
當然,我還沒有分析應用程序的內存消耗,可能會給出非常不同的結果。
s.replaceAll("[\\s\\.]", "_")
可以使用split
方法,這是遵循一個正則表達式(正則表達式)。
你能在這裏看到的例子:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29
啊我的代碼,甚至沒有工作...我猜是因爲它說的replaceAll使用正則表達式等等「」是一個問題 – ycomp 2012-02-15 15:01:23