首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用java中的regex从下面的字符串中获取值

如何使用java中的regex从下面的字符串中获取值
EN

Stack Overflow用户
提问于 2018-06-04 13:27:06
回答 3查看 60关注 0票数 1

我是个初学者。

我有下面的字符串:

代码语言:javascript
复制
Hi Welcome to my site. #binid:BIN-4 #lat:23.025243 #long:72.5980293 #nottype:assign

Output Map : Get Map,包含所有键值,如下所示:

BIN-4 (key=bindid,值=BIN-4)

拉特-23.025243

龙- 72.5980293

非类型-赋值

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-04 13:34:34

您可以找到#,在第一组中捕获1+单词字符,匹配:,然后将1+非空白字符捕获到第二组:

代码语言:javascript
复制
String str = "Hi Welcome to my site. #binid:BIN-4 #lat:23.025243 #long:72.5980293 #nottype:assign";
Map<String, String> res = new HashMap<String, String>();
Pattern p = Pattern.compile("#(\\w+):(\\S+)");
Matcher m = p.matcher(str);
while(m.find()) {
    res.put(m.group(1),m.group(2));
    System.out.println(m.group(1) + " - " + m.group(2)); // Demo output
}

Java演示

输出:

代码语言:javascript
复制
binid - BIN-4
lat - 23.025243
long - 72.5980293
nottype - assign

模式细节

  • # -一个#符号
  • (\\w+) -捕获组1:一个或多个单词字符
  • : -一个冒号
  • (\\S+)-捕获组2:一个或多个非空白字符

Regex演示

票数 1
EN

Stack Overflow用户

发布于 2018-06-04 13:36:48

为此,您可以尝试以下方法:

代码语言:javascript
复制
String s = "Hi Welcome to my site. #binid:BIN-4 #lat:23.025243 #long:72.5980293 #nottype:assign";
        String startsWithHash = s.substring(s.indexOf('#')+1);
        String arr[] = startsWithHash.split("#");
        Map<String, String> map = new HashMap<>();
        Arrays.stream(arr).forEach(element -> map.put(element.split(":")[0], element.split(":")[1]));

        System.out.println(map.toString());

O/P:

代码语言:javascript
复制
{binid=BIN-4 , nottype=assign, lat=23.025243 , long=72.5980293 }
票数 1
EN

Stack Overflow用户

发布于 2018-06-04 13:32:02

您可以用下一种方式扩展正则表达式: 1)初始拆分以获得对(就像现在所做的那样) 2)每对执行另一次:拆分,这将给您提供第一个元素作为键,第二个元素作为值。

代码片段:

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        Map<String, String> result = new HashMap<>();
        String input = "Hi Welcome to my site. #binid:BIN-4 #lat:23.025243 #long:72.5980293 #nottype:assign";
        String systemData = input.replace("Hi Welcome to my site. ", "");
        Arrays.asList(systemData.split("#")).forEach(pair -> {
            if (!pair.isEmpty()) {
                String[] split = pair.split(":");
                result.put(split[0], split[1]);
            }
        });

        result.entrySet().forEach( pair -> System.out.println("key: " + pair.getKey() + " value: " + pair.getValue()));
    }
}

结果:

键: binid值: BIN-4

键:key类型值:赋值

键: lat值: 23.025243

键:长值: 72.5980293

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50681760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档