使用 replaceAll() 在字符串中查找三位数

Find a three-digit number in a string using replaceAll()

我有 String 需要从中提取关键字。

类似于:“我有 100 个朋友和 1 个坏人”。

我只需要使用 replaceAll 函数和适当的 regex.

String 中提取“100

我试过这样做:

String input = "I have 100 friends and 1 evil";
String result = input.replaceAll("[^\d{3}]", "")

但是没用。任何帮助将不胜感激。

您可以考虑以下任何一种解决方案:

String result = input.replaceFirst(".*?(\d{3}).*", "");
String result = input.replaceFirst(".*?(?<!\d)(\d{3})(?!\d).*", "");
String result = input.replaceFirst(".*?\b(\d{3})\b.*", "");
String result = input.replaceFirst(".*?(?<!\S)(\d{3})(?!\S).*", "");

regex demo注意你也可以在这里使用replaceAll,但它没有意义,因为在这种情况下只能进行一次替换。

这里,

  • .*? - 匹配除换行字符以外的任何零个或多个字符,尽可能少
  • (\d{3}) - 将任意三位数字捕获到第 1 组中
  • .* - 匹配除换行字符以外的任何零个或多个字符,尽可能多。

(?<!\d) / (?!\d) 环视是数字边界,如果序列是四位或更多数字则不匹配。 \b 是单词边界,不会有匹配的三个数字粘在一个字母,数字或下划线。 (?<!\S) / (?!\S) 环视是白色 space 边界,匹配前必须有 space 或字符串开头,匹配后必须有 space 或字符串结尾.

替换为</code>,第1组的值</p> <p>参见 <a href="https://ideone.com/NlLg5w" rel="nofollow noreferrer">Java demo</a>:</p> <pre><code>String input = "I have 100 friends and 1 evil"; System.out.println(input.replaceFirst(".*?(\d{3}).*", "")); System.out.println(input.replaceFirst(".*?(?<!\d)(\d{3})(?!\d).*", "")); System.out.println(input.replaceFirst(".*?\b(\d{3})\b.*", "")); System.out.println(input.replaceFirst(".*?(?<!\S)(\d{3})(?!\S).*", ""));

全部输出100.