使用replaceAll方法需要替换

时间:2017-03-21 11:44:22

标签: java regex string replaceall

我想要替换字符串但是我无法解决应该使用哪个正则表达式。

首先,我有很多这样的字符串;

String rawString = "w1.28-user_request"

然后,我想得到那样的字符串;

w1_28-user_request

正如我所说,我有一些这样的字符串; week1.detailed_design所以在这种情况下,我会week1_detailed_design。最后,我只需要处理w1.23_design_req-open

的情况

PS:用户,请求等只是一个示例命名对象

请注意,以下用法对我没用,因为除了上述情况我已经有"."。例如;

user.request_updated

所以我只需要知道如何处理这个案例:w2.25-update_request

rawString.replaceAll("\\.","_"); // not useful

最后,模式如下;

  • string1.2string 应为 string1_2string
  • 1.2string 应为 1_2string
  • string1.2 应为 string1_2

1 个答案:

答案 0 :(得分:1)

您需要替换数字附带的.

使用

rawString = rawString.replaceAll("(\\d)\\.(\\d)","$1_$2");

模式详情

  • (\\d) - 捕获到第1组的数字(从替换模式通过$1引用)
  • \\. - 一个文字点
  • (\\d) - 捕获到第2组的数字(从替换模式通过$2引用)

请参阅Java demo

List<String> strs = Arrays.asList("string1.2string", "string1.2", "1.2string");
for (String str : strs)
    System.out.println(str.replaceAll("(\\d)\\.(\\d)", "$1_$2"));

输出:

string1_2string
string1_2
1_2string