为了账号安全,请及时绑定邮箱和手机立即绑定

如何提取字符串的特定部分并替换为相同的提取值但在不同情况下

如何提取字符串的特定部分并替换为相同的提取值但在不同情况下

繁花不似锦 2021-10-17 15:36:51
我的输入t%60hiag%2Fra%2Cjan我希望将其转换为t%60hiag%2fra%2cjan我想用 %2f 替换 %2F。即 0-9 之间的任何数字后跟来自 AF 的大写字母应转换为小写字母。我能够提取并替换为通用字符串。但我需要帮助将提取的字符串替换为小写。  private static String urlEncodeLowerCase(String stringInput)  {    stringInput = stringInput.replaceAll("%[0-9]{1}[A-F]{1}", "T");      return stringInput;  }上面的代码将提取并用“T”替换提取的字符串,但我想要类似的东西stringInput = stringInput.replaceAll("%[0-9]{1}[A-F]{1}", "%[0-9]{1}[A-Z]{1}".toLowerCase);  上面的代码不起作用。这只是为了让您了解我的要求。
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

您应该使用正则表达式来匹配要更改的字符串部分。之后,您应该遍历所有匹配项并使用转换匹配部分重建字符串,并且不更改所有其他部分。看看 Pattern、Matcher 和 StringBuilder 类是如何工作的。


查看完整回答
反对 回复 2021-10-17
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您可以使用Matcher#appendReplacement. 根据Java Matcher类文档:


的appendReplacement和appendTail方法可以串联使用,以便收集的结果到一个现有的字符串缓冲区


请参阅此 Java 演示:


String s = "Some Text %0A";

Pattern p = Pattern.compile("%[0-9][A-Z]");

StringBuffer result = new StringBuffer();

Matcher m = p.matcher(s);

while (m.find()) {

    m.appendReplacement(result, m.group().toLowerCase());

}

m.appendTail(result);

System.out.println(result.toString());

// => Some Text %0a

如果要确保大写字母后有单词边界,请使用"%[0-9][A-Z]\\b"模式。


查看完整回答
反对 回复 2021-10-17
  • 3 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信