【问题标题】:Find Text between special characters and replace string查找特殊字符之间的文本并替换字符串
【发布时间】:2018-02-16 06:04:57
【问题描述】:

例如,我有一个字符串,其中包含:

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**

【问题讨论】:

  • 小心替换String 这样。您可以在"test string *67* **Hi**, I am **67**" 中替换比您想象的更多。但既然你已经可以使用substring 找到String,为什么不直接取左边部分,添加替换部分,添加右边部分。
  • @Roadman1991 你也想替换字符串*Hi* 吗?
  • 这是怎么被赞成的?...
  • 为什么要使用替换???您的目标是分隔字符串,在这种情况下,我会说替换是不可取的。

标签: java string replace substring


【解决方案1】:

你只需要扩展边界:

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

【讨论】:

  • 就像Mário Fernandes 指出的那样,由于您将* 保留在第一个子字符串中,因此您的第二个indexOf 将返回0 ;)
  • 只是想评论一下:)
【解决方案2】:

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

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

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

DEMORegex explanation

编辑
要删除特殊字符,请使用下面的正则表达式:

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

DEMO

【讨论】:

  • 我认为这很棒。但是输出应该是这样的: // output: test string hello hi
  • 更新了正则表达式以删除特殊字符
【解决方案3】:
s = s.substring(s.indexOf("*"));
s = s.substring(0, s.indexOf("*", 1) + 1);

你的+1在错误的地方:)那你只需要从第二个位置开始找到下一个

【讨论】:

    【解决方案4】:

    我认为您甚至可以使用 List 获得输出

    String s = "test string *67* **Hi**";
    
    List<String> sList = Arrays.asList(s.split(" "));
    
    System.out.println(sarray.get(sarray.indexOf("*67*")));
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-03
      • 2015-08-26
      • 2015-07-10
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2022-12-29
      • 2017-03-24
      相关资源
      最近更新 更多