当前位置: 首页 > 知识库问答 >
问题:

Java 使用正则表达式替换多元字符

左丘积厚
2023-03-14

我正在尝试编写一个字符串替换方法,它可以工作,但是在同一个字符串上使用多个替换方法看起来很糟糕。我很确定我可以在这里使用正则表达式。

        List<String>  strng = Collections.singletonList(answer.toString()
                .replace(",", "/")
                .replace("#"", " ")
                .replace("*", "")
                .replace("&", "")
                .replace("]", ""));

我想只使用1替换()或替换所有()方法。简而言之,尝试构造一个正则表达式来替换这些字符,#*

共有3个答案

荣曾笑
2023-03-14

如果您碰巧使用ApacheCommons库,可以使用replaceChars方法

replaceChars(String str, String searchChars, String replaceChars)

来自StringUtils类。但在我看来,仅仅因为包含库的一种方法是多余的。

String str = "foobar,123#xyz*abc&def]";
String res = StringUtils.replaceChars(str, ",#*&]", "/ ");
System.out.println(res);

//output : foobar/123 xyzabcdef 
支铭晨
2023-03-14

最后三个调用可以使用正则表达式替换为一个调用,如下所示:

List<String>  strng = Collections.singletonList(answer.toString()
                .replace(",", "/")
                .replace("#", " ")
                .replaceAll("[\\*&\\]]", ""));

regex,< code>[\\*

演示:

public class Main {
    public static void main(String[] args) {
        String str = "Hello,Hi#Bye*World&Welcome]Good";
        System.out.println(str
                            .replace(",", "/")
                            .replace("#", " ")
                            .replaceAll("[\\*&\\]]", ""));
    }
}

输出:

Hello/Hi ByeWorldWelcomeGood
帅锦
2023-03-14

简单的正则表达式替换操作不支持一个操作中的条件替换。

启用最新的 JDK 和“预览功能”后,您可以执行以下操作

static final Pattern SPECIAL_CHARS = Pattern.compile("[,#*&\\]]");
List<String> strng = List.of(
    SPECIAL_CHARS.matcher(answer.toString())
        .replaceAll(mr -> switch(mr.group().charAt(0)) {
            case ',' -> "/";
            case '#' -> " ";
            default -> "";
        }));

Java语言

static String replaceSpecialChars(String input) {
    Matcher m = SPECIAL_CHARS.matcher(input);
    if(!m.find()) return input;
    StringBuffer sb = new StringBuffer(input.length());
    do {
        String s;
        switch(m.group().charAt(0)) {
            case ',': s = "/"; break;
            case '#': s = " "; break;
            default: s = "";
        }
        m.appendReplacement(sb, s);
    } while(m.find());
    return m.appendTail(sb).toString();
}

虽然这些方法一次完成操作,但是您需要一个非常大的输入字符串才能从中受益。否则,您的普通(非正则表达式)< code>replace调用链可能会更有效。您甚至可以将前两个从< code>String替换为< code>char替换,即< code >。替换(',','/')。替换(' # ',' ')。因为其他三个具有相同的替换,所以它们可以被一个< code >替换。replaceAll("[*

 类似资料:
  • 我有一根绳子: 我想将所有字符(#,)替换为(#),因此例外的输出是: 注意:我不知道字符串中有多少(#)或(#)序列 我尝试的是: 我试着写: 但结果是: 我的在线尝试 我尝试将(*)用于序列,但没有成功: 那么我如何才能得到我的例外输出?

  • 问题内容: 我有这个字符串: 现在,我想在每个数字之前添加String num:。 因此结果必须是: 这也必须工作: 用于搜索数字的正则表达式是:[0-9]+ 但是我想用num:+ [匹配的子字符串]替换匹配的子字符串。 我现在写了一个带有数字的示例,但另一个示例可以是:在每个电子邮件地址之前添加 ·Email found·: 问题答案: 利用分组。您可以使用括号(并)定义组,并通过组索引$n在哪

  • Change is inevitable, except from vending machines. — Robert C. Gallagher Puppet 的 regsubst 函数提供了一种处理文本的简单方法, 用于在字符串中查找和替换,或者从字符串提取匹配的模式。 例如,我们通常需要对从 facter 或者从外部程序获得的数据做这样的处理。 在本例中将会看到如何使用 regsubst 提

  • 看起来很简单,但我很难想出一个好的方法来做到这一点。这在正则表达式中应该是可能的。在中替换。NET VB。。。对不起,我在Regex还是个新手。。。 我有一个包含销售收据的长字符串。。。。我不想在某些情况下显示美元金额,因此我想在显示字符串之前将所有金额替换为0.00。即。 原始字符串: 订单详细信息:项目一1@$33.99$33.99项目二100@$3.99$399.00项目三10@$333.9

  • 问题内容: 我需要替换字符串的一部分。我浏览了Python文档并发现了re.sub。 我期望这能打印,而不是“酒吧”。 谁能告诉我我做错了什么? 问题答案: 除了捕获要 替换 的零件外,您还可以捕获要 保留 的零件,然后使用引用对其进行引用以将它们包括在替换字符串中。 尝试以下方法: 另外,假设这是HTML,则应考虑使用HTML解析器来执行此任务,例如Beautiful Soup 。

  • 通过好奇心,有没有办法用Java Stream编写它?