2013-05-02 89 views
-6

我有一個字符串和單詞列表。我想搜索該字符串中的每個單詞,並用UPDATE DATABASE到UPD DB等任何快捷方式替換該單詞。 下面是的話,我需要尋找搜索關鍵字並用它們的縮寫替換它們

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,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"); 
} 

的if else if條件我用,但我不認爲這是一個有效的方式來編碼。任何人都可以幫助我解決這個問題。我問過我的朋友他們告訴我使用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 2013-05-02 18:58:58

+0

*有些人遇到問題時,認爲 「我知道,我會用正則表達式。」現在他們有兩個問題。* - Jamie Zawinski – 2013-05-02 18:59:52

+0

這是我的代碼===> if(payloadStr.contains (「UPDATE DATABASE」)){payloadStr = payloadStr.replace(「UPDATE DATABASE」,「UPD DB」); \t \t }否則如果(payloadStr.contains( 「ALTER DATABASE」)){ \t \t payloadStr = payloadStr.replace( 「ALTER DATABASE」, 「ALTR DB」); \t} – user1771540 2013-05-02 19:10:59

回答

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

感謝您的回覆。可能是我沒有正確解釋我的問題。它不像你正在解釋的。我有一條消息作爲字符串,因爲可以有任何前面提到的單詞,例如update database,alter table等。我必須尋找那個詞,它可能會或可能不會有這些詞。如果任何這些單詞包含在該字符串中,我必須替換爲該特定單詞的任何快捷方式名稱。 – user1771540 2013-05-02 19:17:56

+0

瞭解,但上述方法仍然有效。查看replaceall()的文檔http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String) – 2013-05-02 19:33:38

+0

非常感謝你爲我工作。 – user1771540 2013-05-02 21:59:30

1

我可能沒有理解你的問題很好,但...
Java中的String類提供了一個「替代」的方法,使用:

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

@ user1771540不需要IF。替換將返回實際的字符串,如果它找不到要替換的東西。 – ncourcy84 2013-05-02 19:16:50

相關問題