我有一个字符串为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正则表达式非常陌生。
答案 0 :(得分:3)
是的,一个简单的正则表达式就可以解决问题。只需将您的输入添加到匹配#
的正则表达式前,然后加上一些数字(假设是模式):
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());
}
答案 1 :(得分:0)
使用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);
}
答案 2 :(得分:0)
并不比@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