2016-03-15 91 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 ... –

相關問題