【问题标题】:Search for keywords and replace them with their abbreviations [closed]搜索关键字并用它们的缩写替换它们[关闭]
【发布时间】:2013-04-27 01:50:06
【问题描述】:

我有一个字符串和单词列表。我想搜索该字符串中的每个单词并将该单词替换为任何快捷方式,例如将 UPDATE DATABASE 更新为 UPD DB。 以下是我需要查找的单词列表

更改数据库、更改表、更改视图、创建数据库、创建过程、创建模式、创建表、创建视图、删除、删除数据库、删除过程、删除表、删除视图、更新数据库。

这是我的代码 ===>

   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 条件,但我认为这不是一种有效的编码方式。任何人都可以在这个问题上帮助我。我问过我的朋友,他们告诉我使用正则表达式,但我觉得正则表达式对我来说很复杂。

以下是我案例的答案:

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

【问题讨论】:

  • 我用了 if else if 条件然后给我们看。
  • 有些人在遇到问题时会想“我知道,我会使用正则表达式”。现在他们有两个问题。 -- Jamie Zawinski
  • 这是我的代码 ===> 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"); }
  • 感谢所有回复的人
  • @user1771540 请点击edit 将此注释代码编辑到您的原始帖子中。注释代码不可读。如果我们更好地了解您想要实现的目标,那么我们将很容易为您提供更好的帮助。

标签: java regex replace contain


【解决方案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]);
}

【讨论】:

  • 感谢您的回复。可能是我没有正确解释我的问题。它不像你解释的那样。我有一条消息作为字符串,其中可以有我之前提到的任何单词,例如更新数据库、更改表等。我必须搜索它可能有也可能没有这些词的那个词。如果其中任何单词包含在该字符串中,我必须用该特定单词的任何快捷方式名称替换。
  • 了解,但上述方法仍然有效。查看 replaceall() docs.oracle.com/javase/6/docs/api/java/lang/… 的文档
  • 非常感谢它对我有用。
【解决方案2】:

我可能没有很好地理解您的问题,但是...
Java 中的 String 类提供了一个“替换”方法,使用:

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

【讨论】:

  • @user1771540 不需要 IF。如果没有找到要替换的内容,替换将返回实际字符​​串。
猜你喜欢
  • 2012-11-25
  • 2019-03-23
  • 2017-07-12
  • 2013-07-05
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
相关资源
最近更新 更多