我想用%2f替换%2F。也就是说,0-9之间的任何数字,再加上A-F中的大写字母,都应转换为小写字母。
我能够提取并替换为通用字符串。但是我需要帮助将提取的字符串替换为小写。
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);
以上代码无效。这只是为了让您了解我的要求。
答案 0 :(得分:1)
尝试
private static String urlEncodeLowerCase(String stringInput) {
Pattern pattern = Pattern.compile("%[0-9]{1}[A-Z]{1}");
Matcher matcher = pattern.matcher(stringInput);
while (matcher.find()) {
String s = matcher.group();
stringInput = stringInput.replace(s, s.toLowerCase());
}
return stringInput;
}
答案 1 :(得分:0)
您应该使用regexp来匹配要更改的字符串部分。之后,您应该遍历所有匹配项,并通过转换匹配的部分来重建字符串,而保留所有其他更改。看一下Pattern,Matcher和StringBuilder类的工作原理。
答案 2 :(得分:0)
您可以使用Matcher#appendReplacement
。根据{{3}}:
Java Matcher class docs和appendReplacement方法可以串联使用,以便将结果收集到现有的字符串缓冲区中
观看此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"
模式。