首页 > 解决方案 > 如何从字符串中删除字母值以及如何在描述中获得所需的字符串?

问题描述

我有以下字符串:

   String textString = "Value for CH2 234 45  HH 2546";

我需要一个正则表达式来删除数字之间的空格,但如果在数字之前有一个非数字值,我也想避免

String texString="23445 2546";

这里要避免在任何非数值之后的数值这里在我的字符串中要避免在 H 之后的数值也有 2 但我只想制作一个像“23445 2546”这样的字符串。如果有任何字母字符,则应将其删除并在数字之间添加空格。

 static String getNumber(String textString) {
    StringBuilder sb = new StringBuilder();
    Matcher matcher = Pattern.compile("(?<!\\w)\\d+(?!\\w)").matcher(textString);
    while (matcher.find()) {
        sb.append(matcher.group());
    }
    return sb.toString();
}

从上面的正则表达式和代码我得到输出:

    String texString="234452546";

所需输出:

    String texString="23445 2546";

更新:

如果有类似的字符串

       String textString = "Value for CH2 234 45  HH 25.46";

输出:字符串 texString="23445 2546";

所需输出:

        String texString="23445 25.46";

enter code here

标签: javaandroidregexstring

解决方案


您可以使用此正则表达式进行匹配:

\b\d[\d.]*\b(?:\h(?!\h*\d))?

正则表达式演示

正则表达式解释:

  • \b: 字边界
  • \d: 匹配 1 个数字
  • [\d.]*: 匹配 0 个或多个数字或点
  • \b: 字边界
  • (?::启动可选的非捕获组
    • \h: 匹配一个水平空格
    • (?!\h*\d): 否定前瞻断言我们在匹配 0 个或更多空格后没有前面的数字
  • )?:结束可选的非捕获组

代码:

String textString = "Value for CH2 234 45  HH 25.46";
final String re = "\\b\\d[\\d.]*\\b(?:\\h(?!\\h*\\d))?";
StringBuilder sb = new StringBuilder();
Matcher matcher = Pattern.compile(re).matcher(textString);
while (matcher.find()) {
    sb.append(matcher.group());
}
System.out.println(sb.toString());

输出:

23445 25.46

使用 Java 9+.results()方法的 Java 代码:

final String re = "\\b\\d[\\d.]*\\b(?:\\h(?!\\h*\\d))?";
String out = Pattern.compile(re)
            .matcher(textString)
            .results()
            .map(MatchResult::group)
            .collect(Collectors.joining());

System.out.println(out);

推荐阅读