Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何用单个子字符串替换连续出现的子字符串?_Java_Android_Regex_String - Fatal编程技术网

Java 如何用单个子字符串替换连续出现的子字符串?

Java 如何用单个子字符串替换连续出现的子字符串?,java,android,regex,string,Java,Android,Regex,String,我有一个html字符串在android中从一个可扩展的字符串中解析出来:- <p dir="ltr"><b><b><b><b><b>qwert</b></b></b></b></b><b><b><b><b><b><b>y</b></b></b></b&g

我有一个html字符串在android中从一个可扩展的字符串中解析出来:-

<p dir="ltr"><b><b><b><b><b>qwert</b></b></b></b></b><b><b><b><b><b><b>y</b></b></b></b></b></b></p>

qwerty

正如您所看到的,标记多次出现

现在我已经完成了点击和试用,用户方法如
replaceAll()
,但它们会替换所有发生的事件

我想要的是,当我传递要查找的子字符串时,让我们说“
”,然后它应该替换,让我们说上面字符串中的前五个连续粗体标记为单个“
”标记

有什么建议吗


所需结果:-

qwerty

您想要这样的东西吗

查找:
()\1+|()\2+

替换:
\1\2

此处演示:
你想要这样的东西吗

查找:
()\1+|()\2+

替换:
\1\2

此处演示:

如果我正确理解了您的问题,您可以尝试以下正则表达式:

(<[^>]+>)\\1+
在代码中

String test = "<p dir=\"ltr\"><b><b><b><b><b>qwert</b></b></b></b></b><b><b><b><b><b><b>y</b></b></b></b></b></b></p>";
String out = test.replaceAll("(<[^>]+>)\\1+", "$1");
String test=“

qwerty

”; String out=test.replaceAll(“(]+>)\\1+”,“$1”);
输出:

<p dir="ltr"><b>qwert</b><b>y</b></p>

qwerty

(]+>)
匹配并捕获组1中找到的第一个标记

正则表达式中的
\\1
表示第一个捕获的标记。
+
表示无限制的重复(嗯,这个限制是一个很大的数字,我认为你不需要担心)

替换的
$1
也指第一个捕获的标记


如果我正确理解了您的问题,您可以尝试以下正则表达式:

(<[^>]+>)\\1+
在代码中

String test = "<p dir=\"ltr\"><b><b><b><b><b>qwert</b></b></b></b></b><b><b><b><b><b><b>y</b></b></b></b></b></b></p>";
String out = test.replaceAll("(<[^>]+>)\\1+", "$1");
String test=“

qwerty

”; String out=test.replaceAll(“(]+>)\\1+”,“$1”);
输出:

<p dir="ltr"><b>qwert</b><b>y</b></p>

qwerty

(]+>)
匹配并捕获组1中找到的第一个标记

正则表达式中的
\\1
表示第一个捕获的标记。
+
表示无限制的重复(嗯,这个限制是一个很大的数字,我认为你不需要担心)

替换的
$1
也指第一个捕获的标记


链接不起作用。我对android到html的解析没有问题。我只是想处理上面的字符串并删除重复项您希望从示例输入中获得的输出是什么?您当前使用的正则表达式是什么?我不熟悉Matcher类。请看我的编辑。我已经更新了我的问题,为什么qwert?链接后的两个链接不起作用。我对android到html的解析没有问题。我只是想处理上面的字符串并删除重复项您希望从示例输入中获得的输出是什么?您当前使用的正则表达式是什么?我不熟悉Matcher类。请看我的编辑。我已经更新了我的问题,为什么在qwert之后有两个?我对这种模式还不熟悉。您的代码在上面运行良好。你能给我解释一下这个过程和上面模式中所有方括号的意思吗?
指的是这些符号本身<代码>[^>]+是一个字符类。它表示除
以外的任何字符,至少重复一次。如果我有
[^a]+
,这意味着除了
a
之外的任何字符都至少重复一次。这有用吗?你还有什么要问的吗?是的。谢谢,如果我的字符串有以下内容:-
。我可以匹配备用“”并替换它们吗?@RahulGupta这可能是个问题。。。这(如果它起作用的话)将使您的示例输入变成:

qwerty

,我不确定您想要什么。我对这种模式是新手。您的代码在上面运行良好。你能给我解释一下这个过程和上面模式中所有方括号的意思吗?
指的是这些符号本身<代码>[^>]+是一个字符类。它表示除
以外的任何字符,至少重复一次。如果我有
[^a]+
,这意味着除了
a
之外的任何字符都至少重复一次。这有用吗?你还有什么要问的吗?是的。谢谢,如果我的字符串有以下内容:-
。我可以匹配备用“”并替换它们吗?@RahulGupta这可能是个问题。。。这(如果它起作用的话)将使您的示例输入变成:

qwerty

,我不确定您是否希望这样。