我有一个像这样的字符串:
String content = "{"begin"bf3b178a70.jpg","end",....},{"id":,"f06190e8938.jpg","end",....}"
我希望像这样删除图像ID:
bf3b178a70.jpg
f06190e893.png
之后,我想用一个像这样的新网址编写图像ID:
url.com/image/bf3b178a70.jpg
url.com/image/f06190e893.png
我从substring()开始剪切第一部分并使用content.split(""id":,");
,但我遇到了字符串数组和普通字符串的问题。我使用带有for循环的字符串数组,因为真正的字符串非常长。
请有人帮助我吗?
答案 0 :(得分:1)
乍一看,您的字符串格式为JSON。如果是这种情况,您可以使用JSON.org Java parser或JSON.org site上列出的众多其他解析器之一将其分解,或者只是按照它们提供的语法图表进行操作;由于JSON不是regular language。
,因此不建议使用简单的字符串斩波我现在假设您正在接收JSON数组对象(方括号,逗号分隔),并且您正在从文件或Web服务中读取,其中任何一个都提供InputStream
。如果您还有其他内容,则可以将Reader
或普通String
传递给JSONTokener
构造函数,或者如果您有字节数组,则可以将其包装在ByteArrayInputStream
中并将其传递给。
我没有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's 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;
}
}
答案 1 :(得分:0)
尝试这样的事情:
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);
}
}