【问题标题】:Java replace strings between two commasJava替换两个逗号之间的字符串
【发布时间】:2017-12-28 07:35:33
【问题描述】:

字符串 = "9,3,5,*****,1,2,3"

我想简单地访问“5”,它位于两个逗号之间,就在“*****”之前;然后只将这个“5”替换为其他值。

我如何在 Java 中做到这一点?

【问题讨论】:

  • 没什么。我知道 s.split; s.替换; s.子串;但是如何先拆分再替换?
  • 您应该根据您的尝试和您面临的问题提出问题。您可以像这样使用正则表达式模式 String pattern = ".*(\\d),\*+";并在该正则表达式上创建一个 Pattern r = Pattern.compile(pattern);现在针对文本运行匹配器对象 Matcher m = r.matcher(text);如果您在检查 m.find() 是否找到任何东西后按捕获组分组,则 m.group(1) 将包含您的值。请阅读 Java 中的 RegEx 和捕获组。检查这个 SO 问题stackoverflow.com/questions/17969436/…

标签: java regex replace split


【解决方案1】:

您可以尝试使用以下正则表达式替换:

String input = "9,3,5,*****,1,2,3";
input = input.replaceAll("[^,]*,\\*{5}", "X,*****");

下面是正则表达式的解释:

[^,]*,    match any number of non-comma characters, followed by one comma
\\*{5}    followed by five asterisks

这意味着匹配字符串中五个星号之前的任何 CSV 术语加上逗号。然后,我们将其替换为您想要的,以及原始模式中的五颗星。

演示在这里:

Rextester

【讨论】:

  • 我很抱歉,@Tim。我搞砸了,然后我们发生了冲突。很抱歉。我并不是真的想成为破坏者。
  • 非常感谢。但是你能解释一下 "\*{5}" 吗?这是什么意思?
【解决方案2】:

我会使用带有前瞻功能的正则表达式来查找",*****" 之前的一串数字,并将其替换为新值。您要查找的正则表达式是\d+(?=,\*{5}) - 即一个或多个数字,前瞻包含一个逗号和五个星号。所以你会写

newString = oldString.replaceAll("\\d+(?=,\\*{5})", "replacement");

以下是替换中使用的正则表达式模式的解释:

\\d+           match any numbers of digits, but only when
(?=,\\*{5})    we can lookahead and assert that what follows immediately
               is a single comma followed by five asterisks

需要注意的是,前瞻(?=,\\*{5}) 断言但不消耗。因此,我们可以忽略它的替换。

【讨论】:

  • 谢谢。 \\d+ 表示数字;而 \*{5} 表示五个星号。但我仍然对 +(?= part; 这是什么意思?
【解决方案3】:

我认为newstr是“6”

String str =  "9,3,5,*****,1,2,3";
char newstr = '6';
str = str.replace(str.charAt(str.indexOf(",*") - 1), newstr);

此外,如果您不确定 str 长度检查 IndexOutOfBoundException 并处理它

【讨论】:

    【解决方案4】:

    您可以在,split,然后在join 上使用,(在将5 替换为所需的值之后 - 比如说X)。喜欢,

    String[] arr = "9,3,5,*****,1,2,3".split(",");
    arr[2] = "X";
    System.out.println(String.join(",", arr));
    

    哪些输出

    9,3,X,*****,1,2,3
    

    【讨论】:

    • 我认为 OP 有兴趣找到 ***** 并替换 before 元素,无论它在数组中的位置如何。
    • @DawoodibnKareem 在两个逗号之间,就在 "*****"; 之前 - 所以看起来索引是固定的(对我来说)。
    【解决方案5】:

    你可以使用 spit() 替换字符串

    String str =  "9,3,5,*****,1,2,3";
    String[] myStrings = str.split(",");
    String str1 = myStrings[2];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 1970-01-01
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多