我正在尝试编写一个字符串替换方法,它可以工作,但是在同一个字符串上使用多个替换方法看起来很糟糕。我很确定我可以在这里使用正则表达式。
List<String> strng = Collections.singletonList(answer.toString()
.replace(",", "/")
.replace("#"", " ")
.replace("*", "")
.replace("&", "")
.replace("]", ""));
我想只使用1替换()或替换所有()方法。简而言之,尝试构造一个正则表达式来替换这些字符,#*
如果您碰巧使用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
最后三个调用可以使用正则表达式替换为一个调用,如下所示:
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
简单的正则表达式替换操作不支持一个操作中的条件替换。
启用最新的 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编写它?