用不同的值替换长字符串的各个部分

拉吉尚瓦瓦米

我有一个像下面这样的字符串;

String textToShow = "Appplication [%ApplicationName%]: started at [%Date%][%Time%]"

在我需要用不同的值之间[%之间替换字符串的地方%]

我在下面确实喜欢,但是它仅适用于第一个,即“ ApplicationName”。

private String getTextVariableName(String stringToShow) {
    if (stringToShow.contains("[%") && stringToShow.contains("%]")) {
        String content[] = notificationText.split("%");
        return content[1];
    }
    return null;
}

private String replaceValue(String stringToShow, String dataToReplace) {
    return stringToShow.substring(0, stringToShow.indexOf("["))
            + dataToReplace
            + stringToShow.substring(stringToShow.indexOf("]") + 1, stringToShow.length());
}

public String processText(String stringToShow, String appname) {
    String variableName = getTextVariableName(stringToShow);
    String processedText = "Invalid";
    if (variableName != null) {
        switch (variableName.toLowerCase()) {

        case "applicationname":
            processedText = replaceValue(stringToShow, appname);
            break;

        case "datetime":
            LocalDateTime currentDateTime = LocalDateTime.now();
            String formattedCurrentDateTime = currentDateTime
                    .format(DateTimeFormatter
                            .ofPattern("yyyy-MM-dd HH:mm:ss"));
            processedText = replaceValue(stringToShow,
                    formattedCurrentDateTime);
            break;

        case "date":
            LocalDate currentDate = LocalDate.now();
            String formattedCurrentDate = currentDate
                    .format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            processedText = replaceValue(stringToShow,
                    formattedCurrentDate);
            break;

        case "time":
            LocalTime currentTime = LocalTime.now();
            String formattedCurrentTime = currentTime
                    .format(DateTimeFormatter.ofPattern("HH:mm:ss"));
            processedText = replaceValue(notificationText,
                    formattedCurrentTime);
            break;

        default:
            processedText = "Invalid";
            break;
        }
    }
    return processedText;
}

如果有更多类似的部分出现,我如何使它适用于整个字符串而又不将其分开?

有没有更好的方法而不拆分?

注意:我从数据库获取此字符串,因此无法更改该字符串。我只需要替换字符串之间[%%]根据字符串名称的部分即可。例如,如果它是一个日期,则必须用日期替换,依此类推。

霍尔格

正则表达式API提供了所需的逻辑,你可以用它来有效地置换的一个字符串变量的任意数目,见appendReplacementappendTail

public String processText(String stringToShow, String appname) {
    Matcher m=Pattern.compile("\\[%(\\w+)%\\]").matcher(stringToShow);
    if(!m.find()) return stringToShow;
    StringBuffer sb=new StringBuffer();
    do {
        String replacement;
        switch(m.group(1).toLowerCase(Locale.ROOT)) {
            case "applicationname":
                replacement=appname;
                break;
            case "datetime":
                replacement = LocalDateTime.now().format(
                    DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
                break;
            case "date":
                replacement = LocalDate.now().format(
                    DateTimeFormatter.ofPattern("yyyy-MM-dd"));
                break;
            case "time":
                replacement = LocalTime.now().format(
                    DateTimeFormatter.ofPattern("HH:mm:ss"));
                break;
            default:
                replacement = "Invalid";
        }
        m.appendReplacement(sb, replacement);
    } while(m.find());
    return m.appendTail(sb).toString();
}

请注意,此API缺少的介绍StringBuilder,因此我们必须在StringBuffer此处使用在Java 9中已解决


请注意,如果替换字符串中出现and字符,则为它们appendReplacement分配特殊的含义如果您怀疑它们出现在替换字符串中,但想从字面上插入字符串,则可以使用,即$\quoteReplacementm.appendReplacement(sb, Matcher.quoteReplacement( replacement));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用不同的值替换出现的字符串

来自分类Dev

替换相同的字符串但使用不同的字符串值?

来自分类Dev

用不同值替换字符串中所有出现的最通用方法

来自分类Dev

VIM:如何用不同的值替换字符串的每个实例

来自分类Dev

每次出现用不同的值替换相同的字符串

来自分类Dev

用不同的字符串替换Ruby逗号

来自分类Dev

用不同的字符串替换 SQL 语句的输出

来自分类Dev

在字符串的各个部分移动

来自分类Dev

用不同的映射字符串集替换多个字符串

来自分类Dev

如何快速用不同的字符串替换字符串模式?

来自分类Dev

如何用不同的字符串替换一组文件中的字符串?

来自分类Dev

用不同的字符串替换字符串的偶数和奇数重复

来自分类Dev

用不同的字符串替换第二次出现的字符串

来自分类Dev

如何在SQL中匹配和替换字符串的各个部分

来自分类Dev

用php替换字符串的不同部分

来自分类Dev

如何在“。”之间设置字符串的各个部分。不同的变量?

来自分类Dev

用不同的字符替换字符串中的多个字符

来自分类Dev

用不同的替换替换数据库列中的多个字符串

来自分类Dev

用不同的文本长度替换字符串中不同长度的数字

来自分类Dev

如何用不同的字符替换字符串中的第一个空格?

来自分类Dev

用不同的字符但数量相同的字符串替换多个点

来自分类Dev

如何用不同的字符替换字符串中的第一个空格?

来自分类Dev

用不同的字符串替换两个相同字符

来自分类Dev

字节字符串到长值

来自分类Dev

提取长字符串之间的值

来自分类Dev

删除字符串的各个部分还是解析数据?

来自分类Dev

如何合并分割的字符串的各个部分?

来自分类Dev

使用PHP删除HTML字符串的各个部分

来自分类Dev

使用Shell脚本用不同的字符串替换行中的文本

Related 相关文章

  1. 1

    用不同的值替换出现的字符串

  2. 2

    替换相同的字符串但使用不同的字符串值?

  3. 3

    用不同值替换字符串中所有出现的最通用方法

  4. 4

    VIM:如何用不同的值替换字符串的每个实例

  5. 5

    每次出现用不同的值替换相同的字符串

  6. 6

    用不同的字符串替换Ruby逗号

  7. 7

    用不同的字符串替换 SQL 语句的输出

  8. 8

    在字符串的各个部分移动

  9. 9

    用不同的映射字符串集替换多个字符串

  10. 10

    如何快速用不同的字符串替换字符串模式?

  11. 11

    如何用不同的字符串替换一组文件中的字符串?

  12. 12

    用不同的字符串替换字符串的偶数和奇数重复

  13. 13

    用不同的字符串替换第二次出现的字符串

  14. 14

    如何在SQL中匹配和替换字符串的各个部分

  15. 15

    用php替换字符串的不同部分

  16. 16

    如何在“。”之间设置字符串的各个部分。不同的变量?

  17. 17

    用不同的字符替换字符串中的多个字符

  18. 18

    用不同的替换替换数据库列中的多个字符串

  19. 19

    用不同的文本长度替换字符串中不同长度的数字

  20. 20

    如何用不同的字符替换字符串中的第一个空格?

  21. 21

    用不同的字符但数量相同的字符串替换多个点

  22. 22

    如何用不同的字符替换字符串中的第一个空格?

  23. 23

    用不同的字符串替换两个相同字符

  24. 24

    字节字符串到长值

  25. 25

    提取长字符串之间的值

  26. 26

    删除字符串的各个部分还是解析数据?

  27. 27

    如何合并分割的字符串的各个部分?

  28. 28

    使用PHP删除HTML字符串的各个部分

  29. 29

    使用Shell脚本用不同的字符串替换行中的文本

热门标签

归档