[Java] 정규 표현식에서 제어 문자를 제외하면 상당히 느리다
7015 단어 Java
INDEX
개요
성기도 아니고 색마도 아니야!# 축장 대사메이커https://t.co/rHdsYHelTL-(@mahny b)pic.twitter.com/jo7oZxH3f9
따라서 String#replace All을 사용하여 제어 문자를 제거하면 서버 응답이 느려지기 때문에 인증코드를 써 보려면 좀 늦을 수 있습니다.
인증 코드
코드 사용 방법
테스트 데이터를 생성하기 위해 GiitHub를 실행합니다.
실행 및 SpeedCrazy Replace All 등급
검증 결과
replaceAll
charAt
1
11,170
5,377
2
11,337
5,437
3
11,203
5,418
4
11,114
5,489
5
11,294
5,527
※ 단위는 ms
총결산
추기 (2018/06/05)
인증 코드
1.
검증 결과
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.GenerateTestData
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyReplaceAll
合計時間 : 12006(ms), 平均時間 : 12(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyPattern
合計時間 : 11023(ms), 平均時間 : 11(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyCharAt
合計時間 : 5589(ms), 平均時間 : 5(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.GenerateTestData
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyReplaceAll
合計時間 : 11189(ms), 平均時間 : 11(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyPattern
合計時間 : 10947(ms), 平均時間 : 10(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyCharAt
合計時間 : 5573(ms), 平均時間 : 5(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.GenerateTestData
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyReplaceAll
合計時間 : 11038(ms), 平均時間 : 11(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyPattern
合計時間 : 11152(ms), 平均時間 : 11(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyCharAt
合計時間 : 5594(ms), 平均時間 : 5(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.GenerateTestData
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyReplaceAll
合計時間 : 11201(ms), 平均時間 : 11(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyPattern
合計時間 : 10829(ms), 平均時間 : 10(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyCharAt
合計時間 : 5593(ms), 平均時間 : 5(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.GenerateTestData
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyReplaceAll
合計時間 : 11164(ms), 平均時間 : 11(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyPattern
合計時間 : 11049(ms), 平均時間 : 11(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
> java -cp .;speedcrazy.jar jp.gr.mahny_conf.replaceall_charat.SpeedCrazyCharAt
合計時間 : 5584(ms), 平均時間 : 5(ms)
mahny@ALFA c:\Users\mahny\Desktop\speedcrazy
>
시험 횟수String#replaceAll
Pattern#match
String#charAt
1
12,006
11,023
5,589
2
11,189
10,497
5,573
3
11,038
11,152
5,594
4
11,201
10,829
5,593
5
11,164
11,049
5,584
※ 단위는 ms
응, 조금 빨랐어... 근데 생각보다 효과가 없네...코드를 잘 못 쓰나요?
추기 총결산(2018/06/05)
Pattern반 번호만 봐도 Pattern을 볼 수 있어요.compile(String)의 매개 변수에 따라 생성 실례에 많은 시간이 걸릴 것 같아서 이번처럼 단순히 제어 문자를 삭제하는 것이 아니라 복잡한 정규적 표현을 가져오면 더 많은 차이가 있지 않을까 생각합니다.그렇게 복잡하면 캐럿 같은 것도 쓸 수 있는 게 아니니까 다음에 한번 검증해 보세요. ↩
Reference
이 문제에 관하여([Java] 정규 표현식에서 제어 문자를 제외하면 상당히 느리다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/neonemo/items/ce678749331c63bc5f66텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)