2013-05-02 2 views
-6

나는 문자열과 단어 목록을 가지고 있습니다. 해당 문자열의 각 단어를 검색하고 UPDATE DB와 UPD DB 같은 바로 가기로 바꿉니다. 다음은 내가 DROP의 DATABASE, DROP 절차, DROP,에서 삭제, VIEW를 작성, 테이블 만들기, 스키마를 작성, CREATE PROCEDURE에, DATABASE를 생성,보기, ALTER TABLE을 ALTER,키워드 검색 및 약어로 바꾸기

ALTER 데이터베이스 볼 필요가 단어의 목록입니다 TABLE, DROP VIEW, UPDATE DATABASE.

이 내 코드 ===>

if(payloadStr.contains("UPDATE DATABASE")){ 
payloadStr = payloadStr.replace("UPDATE DATABASE","UPD DB"); 
} else if(payloadStr.contains("ALTER DATABASE")) { 
payloadStr = payloadStr.replace("ALTER DATABASE", "ALTR DB"); 
} 

조건의 경우 다른 경우 내가 사용하지만 난 그 코드에 효율적인 방법입니다 생각하지 않습니다이다. 어느 누구도이 문제에 대해 저를 도울 수 있습니까? 나는 그들이 내게 REGEX를 사용하라고 말한 것에 대해 친구들에게 물었다. 그러나 나는 정규 표현식이 나를 이해하기에 복잡하다고 느낀다. 아래

는 내 경우에 대한 답변입니다 : ... 나는 당신의 질문을 이해하지 않을 수 있습니다

String[] words = { "UPDATE DATABASE", "ALTER DATABASE", 
        "ALTER TABLE", "ALTER VIEW", "CREATE DATABASE", 
        "CREATE PROCEDURE", "CREATE SCHEMA", "CREATE TABLE", 
        "CREATE VIEW", "DELETE FROM", "DROP DATABASE", 
        "DROP PROCEDURE", "DROP TABLE", "DROP VIEW" }; 

      String[] replaceWith = { "UPD DB", "ALTR DB", "ALTR TBL", 
        "ALTR VW", "CRT DB", "CRT PRCR", "CRT SCHM", "CRT TBL", 
        "CRT VW", "DEL FRM", "DRP DB", "DROP PRCR", "DRP TBL", 
        "DRP VW" }; 

      for (int i = 0; i < words.length; i++) { 

       payloadStr = payloadStr.replaceAll(words[i], replaceWith[i]); 
       getLogger().debug(
         "SQL Statement in Message. Message Modified To Avoid Layer-7 Rejection: " 
           + payloadStr); 
      } 
+1

_i는 condition_ 다음 우리 것을 보여 주면 다른 경우에 사용. – Smit

+0

* 어떤 사람들은 문제가 발생했을 때 "나는 정규식을 사용할 것입니다."라고 생각합니다. 이제는 두 가지 문제가 있습니다. - Jamie Zawinski –

+0

if (payloadStr.contains ("UPDATE DATABASE")) { payloadStr = payloadStr.replace ("UPDATE DATABASE", "UPD DB"); 다른 \t \t} 경우 (payloadStr.contains() "데이터베이스 ALTER") { \t \t payloadStr = payloadStr.replace ("데이터베이스 ALTER", "ALTR DB"); \t} – user1771540

답변

1

replaceAll()을 반드시 사용하십시오. 또한 모든 용어와 바꾸기를 배열에 넣을 수 있습니다. 그래서 같이

:

String text = "ALTER DATABASE, ALTER TABLE, ALTER VIEW, CREATE DATABASE, CREATE PROCEDURE, CREATE SCHEMA, CREATE TABLE"; 

String[] terms = {ALTER DATABASE, ALTER TABLE, ALTER VIEW, CREATE DATABASE, CREATE PROCEDURE, CREATE SCHEMA, CREATE TABLE}; 

String[] replaceWith = {"","","","","","",""}; // whatever you replace with 

for(int i = 0; i < terms; i++) { 
    // may want to account for uppercase/lower case here too 
    text = text.replaceAll(terms[i],replaceWith[i]); 
} 
+0

답변 해 주셔서 감사합니다. 내 질문을 올바르게 설명하지 않았을 수 있습니다. 당신이 설명하는 것을 좋아하지 않습니다. 나는 하나의 메시지를 문자열로 가지고 있는데, 나는 데이터베이스를 업데이트하고, 테이블을 변경하는 등의 언급이있는 단어가있을 수있다. 나는 그 단어를 찾을 필요가 있을지도 모르겠다. 해당 단어 중 해당 단어가 해당 문자열에 포함되어 있으면 특정 단어의 바로 가기 이름으로 바꿔야합니다. – user1771540

+0

위의 방법은 여전히 ​​작동하지만 이해할 수 있습니다.replaceall()에 대한 설명서를 확인하십시오. http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String) –

+0

너무 고맙습니다. – user1771540

1

하지만
자바에서 String 클래스는 "대체"방법을 사용합니다 :

String newString = myString.replace("stringToReplace", "replacement"); 
+0

@ user1771540 IF가 필요 없습니다. 바꿀 내용이 없으면 replace는 실제 문자열을 반환합니다. – ncourcy84