javascript - 字符串拆分以捕获图像 URL
问题描述
我正在寻找拆分类似于此的字符串:
"I/ContentValues: InputLine {"batchcomplete":"","query":{"pages":{"24437894":{"pageid":24437894,"ns":0,"title":"Boston","thumbnail":{"source":"https://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Massachusetts_State_House_-_panoramio_%281%29.jpg/250px-Massachusetts_State_House_-_panoramio_%281%29.jpg","width":250,"height":166},"pageimage":"Massachusetts_State_House_-_panoramio_(1).jpg"}}}}
我想要的只是图像的超链接:
在 C 中很容易做到这一点。通过使用 right(":",7),它将解析出第 7 个 ":" 之后的所有内容。
但是,我似乎在 Java 中找不到类似的东西。
我尝试了以下代码但没有成功:
捕获 HTML 字符串的代码
bandName = artist.artistName;
bandName = bandName.replace(' ','_');
try {
getUrlSource("https://en.wikipedia.org/w/api.php?action=query&titles="+bandName+"&prop=pageimages&format=json&pithumbsize=250");
} catch (IOException e) {
e.printStackTrace();
}
我尝试解析它
private void getUrlSource(String site) throws IOException {
URL url = new URL(site);
Log.i(TAG, "Web Address " + site);
URLConnection urlc = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
urlc.getInputStream(), "UTF-8"));
String inputLine;
StringBuilder a = new StringBuilder();
while ((inputLine = in.readLine()) != null)
a.append(inputLine);
Log.i(TAG, "InputLine " + a);
in.close();
String value = a.substring(a.indexOf("source\":")+1,
a.indexOf("\",", a.indexOf(",")+1));
Log.i(TAG, "Web Address " + value);
//webView.loadUrl(value);
}
日志猫
2020-10-08 13:29:09.328 18746-18746/com.rvogl.androidaudioplayer I/TetheringManager: registerTetheringEventCallback:com.rvogl.androidaudioplayer
2020-10-08 13:29:09.346 18746-18851/com.rvogl.androidaudioplayer W/chromium: [WARNING:dns_config_service_posix.cc(341)] Failed to read DnsConfig.
2020-10-08 13:29:09.423 18746-18746/com.rvogl.androidaudioplayer I/ContentValues: Web Address https://en.wikipedia.org/w/api.php?action=query&titles=Boston&prop=pageimages&format=json&pithumbsize=250
2020-10-08 13:29:09.469 18746-18759/com.rvogl.androidaudioplayer I/roidaudioplaye: Background concurrent copying GC freed 9670(1027KB) AllocSpace objects, 3(60KB) LOS objects, 49% free, 4107KB/8214KB, paused 268us total 159.378ms
2020-10-08 13:29:09.689 18746-18746/com.rvogl.androidaudioplayer I/ContentValues: InputLine {"batchcomplete":"","query":{"pages":{"24437894":{"pageid":24437894,"ns":0,"title":"Boston","thumbnail":{"source":"https://upload.wikimedia.org/wikipedia/commons/thumb/8/84/Massachusetts_State_House_-_panoramio_%281%29.jpg/250px-Massachusetts_State_House_-_panoramio_%281%29.jpg","width":250,"height":166},"pageimage":"Massachusetts_State_House_-_panoramio_(1).jpg"}}}}
2020-10-08 13:29:09.690 18746-18746/com.rvogl.androidaudioplayer E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rvogl.androidaudioplayer, PID: 18746
java.lang.StringIndexOutOfBoundsException: String index out of range: -17
at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:935)
at java.lang.StringBuilder.substring(StringBuilder.java:77)
at com.rvogl.androidaudioplayer.fragments.ArtistDetailsFragment.getUrlSource(ArtistDetailsFragment.java:165)
at com.rvogl.androidaudioplayer.fragments.ArtistDetailsFragment.setDetails(ArtistDetailsFragment.java:124)
at com.rvogl.androidaudioplayer.fragments.ArtistDetailsFragment.onCreateView(ArtistDetailsFragment.java:100)
任何帮助将不胜感激
解决方案
在您使用子字符串的部分中,我使用了这样的方法。
public static StringBuilder cutImg(StringBuilder split){
int start=split.indexOf("\"source\":")+new String("\"source\":").length();
split.delete(0, start);
split.delete(split.indexOf(","), split.length());
return split;
}
有很多方法可以做到这一点,但我仍然不了解 URL 的完整语法,因此如果语法不同,它可能会抛出异常。
推荐阅读
- flutter - Streambuilder 在消费者内部返回 null
- java - JGit!我可以在没有克隆存储库的情况下获取 commitMessage 吗?
- angular - 我如何在 ionic 3 中进行下拉选择
- c# - 如何从按钮中的 Xamarin XAML 代码调用方法(MVVM)
- salt-stack - 是否有任何盐功能或状态可以将文件夹/文件从 minion 复制到 minon 或 minion 到 master?
- c++ - 如何继续从向量中删除奇数位置的值,直到我们只剩下一个?
- r - 向量化向量和矩阵的叉积与 R 中的连续索引
- python - python中的多处理导致数据损坏问题
- rest - 从 GitLab 检查个人访问令牌的范围
- c# - 使用 TextChanged 事件搜索信息或执行操作