查找特定字符之间的文本并替换字符串

3
例如,我有一个包含如下内容的字符串:
``` String s = "test string *67* **Hi**"; ```
我想要得到这个字符串:
*67*

有了这些星号,我就可以开始替换字符串的一部分。目前我的代码看起来像这样:

String s = "test string *67* **Hi**";

        s = s.substring(s.indexOf("*") + 1);
        s = s.substring(0, s.indexOf("*"));

这将输出没有星号的67

我想知道如何获取某些特殊字符之间的字符串,但不包括这些字符在内。

输出应该如下所示:

//output: test string hello **hi**

小心替换像这样的“字符串”。在“test string 67 Hi, I am 67”中,您可能会替换更多内容。但是既然您已经能够使用“substring”找到“字符串”,为什么不只取左侧部分,添加替换部分,再添加右侧部分呢? - AxelH
@Roadman1991,您是否也想替换字符串“Hi”? - MaxZoom
这个怎么被点赞了?... - DPM
为什么要使用replace?你的目标是分离字符串,对于这种情况,我会说使用replace并不理想。 - Simmant
4个回答

3

仅替换特殊字符之间的字符串:

String regex = "(\\s\\*)([^*]+)(\\*\\s)";
String s = "test string *67* **Hi**";
System.out.println(s.replaceAll(regex,"$1hello$3"));

// output: test string *hello* **Hi**

DEMO正则表达式解释

编辑
为了删除特殊字符,请使用以下正则表达式:

String regex = "(\\s)(\\*[^*]+\\*)(\\s)";

演示


我认为这很棒。但输出应该像这样:// 输出:测试字符串 hello hi - Roadman1991
更新了正则表达式,以便删除特殊字符。 - MaxZoom

2
你只需要扩展边界:
s = s.substring(s.indexOf("*"));
s = s.substring(0, s.indexOf("*", 1)+1);

1
就像Mário Fernandes所指出的那样,由于您在第一个子字符串中保留了*,因此您的第二个indexOf将返回0 ;) - AxelH
刚想评论那个 :) - Mário Fernandes

1
s = s.substring(s.indexOf("*"));
s = s.substring(0, s.indexOf("*", 1) + 1);

你的 +1 放错位置了 :) 然后你只需要从第二个位置开始找到下一个


0

我认为你甚至也可以使用List获取你的输出

String s = "test string *67* **Hi**";

List<String> sList = Arrays.asList(s.split(" "));

System.out.println(sarray.get(sarray.indexOf("*67*")));

希望这个能帮到你。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接