簡體   English   中英

使用正則表達式從Java中的字符串中提取值

[英]Using Regular Expressions to Extract a Value in from a string in Java

我有一個字符串作為a#1-b#2-c#3-d#4-e#5-f#6-g#7-h#8-i#9-j#0-k#10-l#11 我想創建一個程序,如果我給的值作為a那么它應該返回a#1 ,如果我給b ,那么它應該返回b#2 ,從給定的字符串。 我對Java正則表達式非常陌生。

是的,一個簡單的正則表達式就可以解決問題。 只需將您的輸入添加到匹配#的正則表達式前,然后輸入一些數字(假設是模式):

String str = "a#1-b#2-c#3-d#4-e#5-f#6-g#7-h#8-i#9-j#0-k#10-l#11";
String input = "a";
Matcher m = Pattern.compile(input + "#\\d+").matcher(str);
if (m.find()) {
    System.out.println(m.group());
}

使用RegExpo進行此類簡單任務可能會產生開銷。 只是字符串搜索:

public static String get(char ch) {
    final String str = "a#1-b#2-c#3-d#4-e#5-f#6-g#7-h#8-i#9-j#0-k#10-l#11";
    int pos = str.indexOf(ch);

    if (pos < 0)
        return null;

    int end = str.indexOf('-', pos);
    return end < 0 ? str.substring(pos) : str.substring(pos, end);
}

並不比@shmosel的答案更好,但是如果您需要重復提取值,則可以構建一次Map ,則每次檢索都會更快(但是初始Map的構建會很慢):-

Map<String, String> map = Arrays.stream(str.split("-"))
        .collect(Collectors.toMap(o -> o.substring(0, o.indexOf('#')).trim(), Function.identity()));

這是完整的代碼:

String str = "a#1-b#2-c#3-d#4-e#5-f#6-g#7-h#8-i#9-j#0-k#10-l#11";
Map<String, String> map = Arrays.stream(str.split("-"))
        .collect(Collectors.toMap(o -> o.substring(0, o.indexOf('#')).trim(), Function.identity()));
System.out.println(map.get("a"));

輸出: a#1

暫無
暫無

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

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