Java 我怎样才能找到全部;)并将其替换为“(”;?
给我一个字符串,我想用一个字符串替换所有连续出现的开括号Java 我怎样才能找到全部;)并将其替换为“(”;?,java,Java,给我一个字符串,我想用一个字符串替换所有连续出现的开括号 ((5))→ (5) ((5)))→ (5) 我试过了 str = str.replaceAll("((", "("); 得到了正则表达式pattern错误 然后我试着 str = str.replaceAll("\\((", "("); str = str.replaceAll("\\\\((", "("); 然后我试着 str = str.replaceAll("\\((", "("); str = str.replace
→ <代码>(5)((5))
→ <代码>(5)((5)))
str = str.replaceAll("((", "(");
得到了正则表达式pattern错误
然后我试着
str = str.replaceAll("\\((", "(");
str = str.replaceAll("\\\\((", "(");
然后我试着
str = str.replaceAll("\\((", "(");
str = str.replaceAll("\\\\((", "(");
我总是遇到同样的错误!你试过这个吗
str = str.replaceAll("\\({2,}", "(");
“\”是转义字符,因此每个特殊字符都必须由它来处理。如果没有转义字符,正则表达式将其读取为用于分组的开括号,并且需要一个闭括号
编辑:起初,我以为他想精确匹配2个,你试过这个吗
str = str.replaceAll("\\({2,}", "(");
“\”是转义字符,因此每个特殊字符都必须由它来处理。如果没有转义字符,正则表达式将其读取为用于分组的开括号,并且需要一个闭括号
编辑:最初,我认为他试图精确匹配2个您需要对每个括号进行转义,并添加
+
以说明连续出现的情况:
str = str.replaceAll("\\(\\(+","(");
您需要对每个括号进行转义并添加
+
,以说明连续出现的情况:
str = str.replaceAll("\\(\\(+","(");
我不确定括号是固定的还是动态的,但假设它们可能是动态的,您可以在这里使用
replaceAll
,然后使用String.Format
来格式化字符串
希望能有帮助
public class HelloWorld{
public static void main(String []args){
String str = "((((5))))";
String abc = str.replaceAll("\\(", "").replaceAll("\\)","");
abc = String.format("(%s)", abc);
System.out.println(abc);
}
}
输出:(5)
我用
((5))
和((5))
尝试了上面的代码,它产生了相同的输出。我不确定括号是固定的还是动态的,但假设它们可能是动态的,您可以在这里使用replaceAll
然后使用String.Format
来格式化字符串
希望能有帮助
public class HelloWorld{
public static void main(String []args){
String str = "((((5))))";
String abc = str.replaceAll("\\(", "").replaceAll("\\)","");
abc = String.format("(%s)", abc);
System.out.println(abc);
}
}
输出:(5)
我用
((5))
和((5))
尝试了上面的代码,它产生了相同的输出。假设括号不需要配对,例如((5))
应该变成(5)
,那么以下操作就可以了:
str = str.replaceAll("([()])\\1+", "$1");
试验
输出
(5)
(5)
(5)
(5)
解释
(启动捕获组
[()]匹配一个“(”或“)”。在字符类中,“(”和“)”
没有特别的意义,所以他们不需要逃走
)结束捕获组,即捕获匹配的“(”或“)”
\1+匹配捕获组#1.中的一个或多个文本作为
Java字符串文字,转义了“\”(加倍)
$1替换为来自捕获组的文本#1
另请参见演示。假设括号不需要配对,例如,
(((5))
应变为(5)
,则以下操作即可:
str = str.replaceAll("([()])\\1+", "$1");
试验
输出
(5)
(5)
(5)
(5)
解释
(启动捕获组
[()]匹配一个“(”或“)”。在字符类中,“(”和“)”
没有特别的意义,所以他们不需要逃走
)结束捕获组,即捕获匹配的“(”或“)”
\1+匹配捕获组#1.中的一个或多个文本作为
Java字符串文字,转义了“\”(加倍)
$1替换为来自捕获组的文本#1
另请参见演示。@AndrewBoards现在我遇到了一个新错误,“无效的转义序列…”如果有3个连续的括号,这将不起作用。结果将是2个括号。您更改了答案,因为它不起作用,现在您有了来自@Andreas注释的代码!!!@AndrewBoards现在我遇到了一个新错误,“无效的转义序列…”如果有3个连续的括号,则此操作不起作用。结果将是2个括号。您在第3次更改了答案,因为它不起作用,现在您有了@Andreas注释中的代码!!!您也可以使用
replaceAll(\\({2,}),“(”)
,即匹配2个或多个开括号。除了使用+
,您还可以使用replaceAll(“\\({2,})”,“(”
),即匹配2个或多个开括号。这应该是测试用例的可接受答案+1。这应该是测试用例的可接受答案+1