[英]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.