java - 크기 - 자바 jlabel 위치



문자열:여러 문자를 단일 문자로 바꾸는 방법은 무엇입니까? (2)

String#replaceAll() String#replace() 대신 String#replace() 사용하면 한 문자 교체를 위해 정규식이 필요하지 않습니다.

빨리 테스트 할 수있는 다음 클래스를 만들었습니다.

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

당연히 나는 아주 다른 결과를 주었을 수도있는 메모리 소비에 대한 프로파일을 작성하지 않았다.

나는 모든 것을 대체하고 싶다 '.'' ''_'

하지만 내 코드가 마음에 들지 않아 ...

이 작업을 수행하는보다 효율적인 방법은 다음과 같습니다.

String new_s = s.toLowerCase().replaceAll(" ", "_").replaceAll(".","_");

?

toLowerCase ()는 저기에 마찬가지로 필요하기 때문에 거기에 ...


Answer #1

s.replaceAll("[\\s\\.]", "_")





string