繁体   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