簡體   English   中英

Java正則表達式-在字符串中查找數值

[英]Java Regex - find a numeric value in a String

在下面的兩個字符串中(需要天氣的情況下),我需要使用正則表達式查找"BKN"之后的第一個"xxxFT"值,然后僅提取數值: xxxx

在第一個字符串中,最終值將為2400 ,在第二個字符串中,最終值為700

"BKN""xxxxFT"是否可能是附加詞,這取決於。 即: "BKN CB 2400FT""BKN 700FT"

String str1 = "4000M WX MODTSRA CLD FEW 600FT BKN CB 2400FT BKN CB 2900FT T 21 DP 18 QNH 1010.7HPA MET QFE 1004.1HPA TREND TEMPO MOD TSRA"

String str2 = "1500M CLD BKN 700FT BKN 4600FT T 16 DP 17 QNH 1014.7HPA MET QFE 1004.1HPA TREND TEMPO MOD TSRA"

我可以為此使用哪種正則表達式模式?

更新:如果要使用單個正則表達式,請使用以下代碼:

Pattern pattern = Pattern.compile("BKN.*?\\s+(\\d+)FT");
Matcher matcher = pattern.matcher(String1);
if (matcher.find()) {
        System.out.println(matcher.group(1));
}

首先,您需要從BKN開始獲取SubString,因此

int startIndex = String1.indexOf("BKN");
String str = String1.subString(startIndex);

然后,您需要將其縮小到BKN和FT之間,以便獲得FT的索引

startIndex = 0;
int endIndex = str.indexOf("FT")+1;
str = str.subString(startIndex,endIndex);

最后,您可以使用此正則表達式並從字符串中刪除非數字字符

str = str.replaceAll("\\D+",""); 

字符串1的輸出:2400字符串2的輸出:700

引用Jeutnarg注釋,我們可以使用Matcher組獲得不帶任何子字符串等的解決方案:

public static void main (String[] args) throws java.lang.Exception
{

    String text    =
        "4000M WX MODTSRA CLD FEW 600FT BKN CB 2400FT BKN CB 2900FT T" + 
        " 21 DP 18 QNH 1010.7HPA MET QFE 1004.1HPA TREND TEMPO MOD TSRA";
        text = "1500M CLD BKN 700FT BKN 4600FT T 16 DP 17 QNH 1014.7HPA MET QFE 1004.1HPA TREND TEMPO MOD TSRA";

    String patternString = "BKN.*?\\s+(\\d+)FT";

    Pattern pattern = Pattern.compile(patternString);

    Matcher matcher = pattern.matcher(text);
    if(matcher.find()) {
        System.out.println(matcher.group(1));
    } else {
        System.out.println("nothing matched");
    }
}

輸出將是所要求的。 第一個和第二個字符串分別為2400和700。

如果輸入字符串有多個匹配項,則唯一需要更改的是if語句,該語句應轉換為while。

while(matcher.find()) {
    System.out.println(matcher.group(1));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM