Find the first occurrence with Regex and Java

前端 未结 3 883
不知归路
不知归路 2020-12-03 22:42

I would like to be able to find the first occurrence of m² and then numbers in front of it, could be integers or decimal numbers. E.g.

"som

相关标签:
3条回答
  • 2020-12-03 23:00

    To get the first match, you just need to use Matcher#find() inside an if block:

    String rx = "\\d+(?:,\\d+)?\\s*m\\u00B2";
    Pattern p = Pattern.compile(rx);
    Matcher matcher = p.matcher("E.g. : 4668,68 m² some text, some text 48 m²  etc");
    if (matcher.find()){
        System.out.println(matcher.group());
    }
    

    See IDEONE demo

    Note that you can get rid of the alternation group using an optional non-capturing group (?:..)?

    Pattern breakdown:

    • \d+ - 1+ digits
    • (?:,\d+)? - 0+ sequences of a comma followed with 1+ digits
    • \s* - 0+ whitespace symbols
    • m\u00B2 - m2.
    0 讨论(0)
  • 2020-12-03 23:05

    This is what I came up with you help :) (work in progress, later it should return BigDecimal value), for now it seems to work:

     public static String findArea(String description) {
    
            String tempString = "";
            Pattern p = Pattern.compile("\\d+(?:,\\d+)?\\s*m\\u00B2");
    
            Matcher m = p.matcher(description);
    
            if(m.find()) {
                tempString = m.group();
            }
    //remove the m and /u00B2 to parse it to BigDecimal later
            tempString = tempString.replaceAll("[^0-9|,]","");
            System.out.println(tempString);
            return tempString;
        }
    
    0 讨论(0)
  • 2020-12-03 23:09

    One simple way of doing it!

    description.replaceFirst(@NotNull String regex,
                               @NotNull String replacement)
    

    JAVADoc: Replaces the first substring of this string that matches the given regular expression with the given replacement.

    0 讨论(0)
提交回复
热议问题