Вырезать определенную часть строки в цикле

У меня есть такая строка:

String content = "{"begin"bf3b178a70.jpg","end",....},{"id":,"f06190e8938.jpg","end",....}"

и я хочу вырезать идентификатор изображения следующим образом:

bf3b178a70.jpg
f06190e893.png

и после этого я хочу составить идентификатор изображения с новым URL-адресом, например:

url.com/image/bf3b178a70.jpg
url.com/image/f06190e893.png

Я начинаю с substring(), чтобы разрезать первую часть и с content.split(""id":,"); но у меня проблемы с строковым массивом и обычной строкой. Я использовал строковый массив с циклом for, потому что реальная строка очень длинная.

Кто-нибудь, пожалуйста, помогите мне?

2 ответа

Сначала краснеть, похоже, что ваша строка отформатирована как JSON. Если в этом случае вы можете использовать парсер JSON.org Java или один из многих других парсеров, перечисленных на сайте JSON.org, чтобы разбить его или просто следовать приведенным синтаксическим диаграммам; простое прерывание струны нецелесообразно, поскольку JSON не является обычным языком.

На данный момент я предполагаю, что вы получаете массив объектов JSON (квадратные скобки вокруг, разделенные запятыми) и что вы либо читаете файл или веб-службу, либо из которых предоставляет InputStream, Если у вас есть что-то еще, вы можете передать Reader или простой String в конструктор JSONTokener, или если у вас есть массив байтов, вы можете его обернуть в ******************** и передать это.

У меня нет JDK, чтобы даже проверить, компилируется ли это :-), но здесь.

import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import org.json.*;

public class ImageListProcessor
{
 public static ArrayList<url> processList(InputStream toProcess, URL baseURL)
 throws JSONException, MalformedURLException
 {
 JSONTokener toProcessTokener = new JSONTokener(toProcess);
 JSONObject toProcessResponse = new JSONObject(toProcess);
 if (!toProcessResponse.isNull("error")) {
 // it an error response, probably a good idea to get out of here
 throw new JSONException("Response contains error: " + toProcessResponse.get("error"));
 }
 JSONArray toProcessArray = toProcessResponse.getJSONArray("items");
 int len = toProcessArray.length();
 ArrayList<url> result = new ArrayList<url>(len);
 for(int i = 0; i < len; i++) {
 JSONObject imageRecord = toProcessArray.getJSONObject(i);
 String imagePath = imageRecord.getString("image");
 // if you want to remove the date portion of the path:
 imagePath = imagePath.substring(1 + imagePath.lastIndexOf('/'));
 URL combinedURL = new URL(baseURL, imagePath);
 result.add(combinedURL);
 }
 return result;
 }
}
</url></url></url>


Попробуйте что-то вроде этого:

import java.util.regex.*;

public class ReplaceDemo {
 public static void main(String[] args) {
 String input = 
 "User clientId=23421. Some more text clientId=33432. This clientNum=100";

 Pattern p = Pattern.compile("(clientId=)(\\d+)");
 Matcher m = p.matcher(input);

 StringBuffer result = new StringBuffer();
 while (m.find()) {
 System.out.println("Masking: " + m.group(2));
 m.appendReplacement(result, m.group(1) + "***masked***");
 }
 m.appendTail(result);
 System.out.println(result);
}
}

licensed under cc by-sa 3.0 with attribution.