2016-03-15 76 views
-1

我有一个看起来像这样的句子{Name = Zeus,Address = Something 21}。我只想得到=(Zeus Something 21)之后的单词,但它不适用于它们两个。这是我的代码从句子中获得特定单词

String line=""; 
    Pattern pattern = Pattern.compile("[=]+([A-Za-z0-9-_]+)"); 
    for (Entity entity : pq.asIterable()) { 
     String placeInfo=entity.getProperties().toString(); 
     line=placeInfo; 
      Matcher matcher = pattern.matcher(line); 
      while (matcher.find()) { 
       result.add(matcher.group()); 
      } 

这就是我得到的结果:=宙斯。 我想这是模式的错,但我不知道要改变什么......任何想法? placeinfo等于看起来像{Name = Something,Address = Something 21}的东西,它是我从我的数据存储获得的实体属性。

+2

使用JSON解析器这一点。但问题是每个实体应该用双引号 – Devavrata

+2

'matcher.group()'''matcher.group(1)'并且在'[A-Za-z0-9-_ ]'。 – Tunaki

回答

-1
Pattern pattern = Pattern.compile("{Name=(.+), Address=(.+)}"); 
Matcher matcher = pattern.matcher("{Name=Zeus, Address=Something 21}"); 
if (!matcher.matches()) throw new RuntimeException(); 
String name = matcher.group(1); 
String address = matcher.group(2); 
+0

为什么downvote?如果是因为应该使用JSON库,请改用格式(它不是有效的JSON) –

+1

这有硬编码的名称和地址 - >非常糟糕。 – Tunaki

+0

我认为downvotes所有者必须回复:)但我认为由于模式“{名称=(。+),地址=(。+)}”是如此有限的不是一个通用的解决方案。 –

0

你的正则表达式和代码看起来非常接近预期的结果;

String line = "{Name=Zeus, Address=Something 21}"; 
Pattern pattern = Pattern.compile("[=]+([A-Za-z0-9-_ ]+)"); //added space 
Matcher matcher = pattern.matcher(line); 
while (matcher.find()) { 
    System.out.println(matcher.group(1)); //did you try group(1) 
} 
+0

这很有帮助,但仍然没有得到第二个字。也许我应该使用json解析器......但是谢谢! –

+0

只复制下面的代码粘贴。输出是宙斯\ n 东西21 –

+0

现在,我复制粘贴你的代码,但它的工作,但事情是,我有多行,这就是为什么我使用 String placeInfo = entity.getProperties()。toString(); line = placeInfo; 当我这样做,它不工作..我不知道为什么 –

0

我不确定这是正确的做法吗?什么是entity.getProperties()的退货类型?如果它是一个Map或一个Properties或一个JSON对象,那么最好使用一个合适的getter,而不要在toString()上使用正则表达式。

Map<String, String> properties = entity.getProperties(); 
String name = properties.get("Name"); 
String address = properties.get("Address"); 
+0

返回类型它不是json,但它就像json ... –

相关问题