Java-regex一次使用另一个字符替换第一个和最后一个字符
假设我这里有这个字符串:Java-regex一次使用另一个字符替换第一个和最后一个字符,java,regex,Java,Regex,假设我这里有这个字符串: [Hel[don't change in the middle]lo] 如何用另一个字符替换第一个和最后一个括号,如下所示: #Hel[don't change in the middle]lo# String str = "[Hel[don't change in the middle]lo]"; str = str.replaceFirst("\\[", "#"); if (str.substring(str.length() - 1).equals("]"))
[Hel[don't change in the middle]lo]
如何用另一个字符替换第一个和最后一个括号,如下所示:
#Hel[don't change in the middle]lo#
String str = "[Hel[don't change in the middle]lo]";
str = str.replaceFirst("\\[", "#");
if (str.substring(str.length() - 1).equals("]")) {
str = str.substring(0, str.length() - 1) + "#";
System.out.println(str);
}
str = str.replace("myregex");
我知道这是可能的,就像这样:
#Hel[don't change in the middle]lo#
String str = "[Hel[don't change in the middle]lo]";
str = str.replaceFirst("\\[", "#");
if (str.substring(str.length() - 1).equals("]")) {
str = str.substring(0, str.length() - 1) + "#";
System.out.println(str);
}
str = str.replace("myregex");
有没有其他简单的方法来使用正则表达式,这样我就可以替换第一个
那最后一枪呢
像这样:
#Hel[don't change in the middle]lo#
String str = "[Hel[don't change in the middle]lo]";
str = str.replaceFirst("\\[", "#");
if (str.substring(str.length() - 1).equals("]")) {
str = str.substring(0, str.length() - 1) + "#";
System.out.println(str);
}
str = str.replace("myregex");
你可以
str = str.replaceAll("^\\[|]$", "#");
您可以使用:
String repl = str.replaceAll("^([^\\[]*)\\[|\\]([^\\]]*)$", "$1#$2");
在这里,我们使用两个子匹配之间的交替:
-匹配0个或多个字符,后跟开头的^([^[]*)\\[
[
-匹配\\]([^]]*)$
,后跟结尾的0个或多个字符]
[
和最后一个]
之前的一些任意字符。这就足够了:
System.out.println(str.replaceAll("^\\[(.*)]$", "#$1#"));
如果操作非常简单,请不要使用正则表达式:
StringBuilder sb = new StringBuilder(str);
sb.set(0, '#');
sb.set(str.length()-1, '#');
String result = sb.toString();
也可以编写一个表达式:
String result =
new StringBuilder(str.length())
.append('#')
.append(str, 1, str.length()-1)
.append('#')
.toString();
如果要替换的字符不在开头和结尾,请使用indexOf
和lastinexof
搜索它们:
sb.set(str.indexOf('['), '#');
sb.set(str.lastIndexOf(']'), '#');
这个show me
#Hel[中间不要改变#lo#
,它改变了最后一个,也改变了字符串内部,这是不正确的。我想这是因为第二个]
没有被转义。否则似乎没问题。结束括号不需要在@Izruo转义,问题是末尾缺少$以指示字符串的结尾Yea,如果结束括号始终位于输入的末尾,则该括号也可以工作。您应该添加^
,否则f[o]o]
将替换为:f#o]o#
此显示错误java.util.regex.PatternSyntaxException:index 20附近的未关闭字符类
此仍显示\Hel[中间不要换#lo
如果我最后不使用#
,它会改变最后一个,但在中间,这并不正确。它只会改变第一个[
和最后一个]
.yes@anubhava我只需要检查字符串是否以该字符串开头并以该字符串结尾,如果不需要更改的话,为此我创建了一个条件if(str.substring(str.length()-1).equals(“]”){
如果它以这个结尾,那么就替换它,否则你就不需要这么想了;)谢谢你@Andy Turner,这在另一种情况下也可以帮助其他人;)注意:不要写str.substring(str.length()-1)。equals(“])
,这会创建一个不必要的字符串。使用str charAt(str.length()-1)=']'].
.mmm,谢谢@AndyTurner这是正确的