假设我只需要找出从文件读取的一行是否包含有限单词集中的单词。
一种方法是使用如下的正则表达式:
.*\y(good|better|best)\y.*
Run Code Online (Sandbox Code Playgroud)
实现此目的的另一种方法是使用如下伪代码:
if ( (readLine.find("good") != string::npos) ||
(readLine.find("better") != string::npos) ||
(readLine.find("best") != string::npos) )
{
// line contains a word from a finite set of words.
}
Run Code Online (Sandbox Code Playgroud)
哪种方式会有更好的性能?(即速度和CPU利用率)
有没有办法以编程方式选择所有 WebView内容?
我知道如何将WebView置于"文本选择模式".但这依赖于用户手动进行选择.
如果有一种方法可以以编程方式选择所有 WebView内容,我该怎么做?
我试图使用Jsoup选择以下HTML代码段中的段落:
<div class="abc ">
<p class="de">Very short paragraph.</p>
</div>
Run Code Online (Sandbox Code Playgroud)
为此,我使用以下Java代码片段:
Elements divs = document.select("div[class=abc ]");
for (Element div : divs) {
Log.v("iwashere", String.format("div[class=abc ]"));
Elements ppp = document.select("p[class=de]");
for (Element p : ppp) {
Log.v("iwashere", p.text());
break;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,由于某种原因,Jsoup似乎没有拿起"DIV [CLASS = ABC]"(在Log.v("iwashere")一直没有出现在日志中.
起初,我认为尾随空间可能是一个问题,所以我也尝试过
Elements divs = document.select("div[class=abc]");
Run Code Online (Sandbox Code Playgroud)
但这也没有帮助.
上面的代码可能有什么问题?
Jsoup 有 2 个html parse() 方法:
我很难理解两者之间差异的含义:
parse()将相对 URL 解析为绝对 URL
”是什么意思?如果
页面中从未出现过标签怎么办?<base href><base href>baseUriHTML 页面的完整 URL(如原始文档中的措辞)还是HTML 页面的基本URL?我设法将一个网页读入一个字符串,但是当我使用Log.d()将它打印到LogCat时,它总是显示少于该页面上的实际内容.
这让我怀疑以下一个(或多个)是可能的解释:
Android中的字符串是否有长度限制?
如果没有,有什么可能解释截断我的字符串?
我试图在维基百科的谷歌入口页面上选择信息框:http://en.m.wikipedia.org/wiki/Google
所以,我打电话给:
contentDiv = document.select("div[id=content]").first();
Run Code Online (Sandbox Code Playgroud)
哪个按预期工作,然后我做:
Elements infoboxes = contentDiv.select("table[class=infobox]");
Run Code Online (Sandbox Code Playgroud)
然后我检查infoboxes.isEmpty(),我惊呆了发现它是空的!
我检查并验证该元素contentDiv包含以下内容:
<table class="infobox vcard" style="width: 22em;" cellspacing="5">
Run Code Online (Sandbox Code Playgroud)
那么,为什么contentDiv.select("table[class=infobox]")返回空?
更新:我测试了以上,contentDiv.select("table[class=infobox vcard]")它工作正常!这很奇怪,因为我知道,与table.infobox.vcard仅选择精确多类元素的符号不同,table[class=infobox]应该选择至少 infobox在其列出的类中的所有表.
顺便说一下,我用不同的维基百科条目测试了代码,其中包含:
<table class="infobox biota" style="text-align: left; width: 200px; font-size: 100%;">
Run Code Online (Sandbox Code Playgroud)
并且contentDiv.select("table[class=infobox]")表现完全符合预期,将表元素作为第一项返回infoboxes.
知道为什么不一致吗?什么可以解释这种奇怪的行为?
有可能我偶然发现了一个Jsoup错误吗?
(我使用的是jsoup-1.5.2,不是最新的,但我不需要HTML5支持,由于各种原因,我无法立即升级到最新的1.6.1).
在我搜索以编程方式选择WebView内容的Javascript方式时,我遇到了这个Javascript代码片段,它在window对象中名为clipboardData的成员中使用名为setData()的方法.
但是当我试图在Javascript引用中找到它的文档时,无法找到clipboardData.
为什么?
window.clipboardData不是Javascript或DOM的一部分吗?
onNewPicture()的文档只说:
通知听众图片已更改
我的问题是:图片什么时候改变?
我注意到有些网页生成了几十个onNewPicture(),所以很明显,在WebView上渲染页面的过程中,"图片"会多次发生变化.
是什么让WebView图片发生变化?
我没有看到任何生成少于2个onNewPicture()调用的页面页面,因此对于任何给定的HTML页面,onNewPicture()是否保证被多次调用?
我发现了一些对正则表达式过滤掉非英语的引用,但它们都不是在 Java 中的,除了它们都指的是与我试图解决的问题有些不同的问题:
true
在字符串包含任何非英语字符时返回。“英文文本”不仅指实际的字母和数字,还指标点符号。
到目前为止,我能够为目标 #1 带来的东西非常简单:
String.replaceAll("\\W", " ")
Run Code Online (Sandbox Code Playgroud)
事实上,如此简单以至于我怀疑我遗漏了什么......你在上面发现任何警告吗?
至于目标#2,我可以简单trim()的字符串后上面replaceAll(),然后检查它是否是空的。但是......有没有更有效的方法来做到这一点?
java ×5
android ×3
jsoup ×3
html-parsing ×2
regex ×2
webview ×2
c++ ×1
clipboard ×1
dom ×1
javascript ×1
logcat ×1
performance ×1
search ×1
selection ×1
string ×1