2014-01-29 2 views
-3

У меня есть следующие строки:Iterate Строка Java и выбрать конкретное слово

[{"index":1,"image":"1234a.jpg","thumbnail":"1234a_t.jpg","medium":"1234a.jpg"}, 
{"index":2,"image":"43215256b.png","thumbnail":"43215256b_t.jpg","medium":"43215256b.jpg"}] 

Я хотел бы, чтобы выбрать только имя JPG или PNG файлов, как (1234a.jpg ИЛИ 43215256b.png) и игнорировать остальную часть String, Как я могу сделать это на Java? Я пробовал substring, но это работает не так, потому что имена JPG отличаются.

Вот кусок моего Java кода:

for (int i = 0; i < data.length(); i++) { 
    JSONObject c = data.getJSONObject(i); 
    map = new HashMap<String, String>(); 
    map.put("imageID", c.getString("imageID")); 
    map.put("image", c.getString("image")); 
    MyArrList.add(map); 
} 

Где изображение это поле базы данных, которая содержит строку выше, поэтому я хотел бы, чтобы выбрать имена Jpgs или имена в форматах PNG из содержимое c.getString ("image") Я пробовал JSON, но не работал, у mabye есть кто-то лучше Идея ?? пожалуйста помоги.

+4

Вы сами пробовали? Возможно, парсер JSON? –

+0

Я бы выбрал парсер JSON над решением RegExp. Либо Гссон, либо Джексон великолепны! –

ответ

0

Попробуйте это: Изменив код:

for (int i = 0; i < data.length(); i++) 
{ 
JSONObject c = data.getJSONObject(i); 
map = new HashMap<String, String>(); 
if(isValid(c.getString("image"))) 
{ 
map.put("imageID", c.getString("imageID")); 
map.put("image", c.getString("image")); 
MyArrList.add(map); 
} 
} 

Это мой патч:

public boolean isValid(String value) 
    { 

     String jpgChk = "\\.jpg$"; 
     String pngChk = "\\.png$"; 
     Matcher jpgMatcher = Pattern.compile(jpgChk).matcher(value); 
     Matcher pngMatcher = Pattern.compile(pngChk).matcher(value); 
     if(jpgMatcher.find()) 
      return value.contains(".png")?false:true; 
     else if (pngMatcher.find()) 
      return value.contains(".jpg")?false:true; 
     else 
      return false; 
    } 

Это это долгое, но немедленное решение вашей проблемы. Если работы согласятся с этим, или мы постараемся минимизировать и оптимизировать этот код

+0

Я не уверен, что isValid() используется в правильном месте в вашем коде, но дело в том, что оно даст правильное логическое значение для вашей строки ввода – SID

+0

Спасибо, он отлично работает в моем коде, но как я могу вернуться полное имя jpg (1234a.jpg) или имя png (43215256b.png) – user3122166

+0

@ user3122166 Что именно вы получаете от 'c.getString (« image »)'? Я предполагаю, что это дает вам полное имя вашего jpg. Другое дело, вместо вызова _map.put() _ дважды на каждой итерации. Вы можете выбрать 'map.put (c.getString (" imageID "). C.getString (" image "))'. Надеюсь, что он работает – SID

0

Разберите его в json формате и проверьте для каждой клавиши, если значение имеет подстроку jpg. если да, то вы можете использовать все значение.

+0

Что делать, если имя изображения содержит «jpg», но на самом деле его png? ;-) –

+0

Тогда вы можете проверить «.jpg». –

+1

Как насчет 'file.jpg.png'? ; -P –

1

Вы должны использовать обычный анализатор JSON. Если это невозможно, используйте regex (?<=")\w+\.jpg(?="), чтобы найти имена, заключенные в кавычки (""), заканчивающиеся на jpg.

При использовании Java-шаблон, вам нужно двойной \ внутри строки "(?<=\")\\w+\\.jpg(?=\")"

Смежные вопросы