我有一个长字符串文本,我必须正则表达式才能找到一个短文本字符串。
例如,我必须从http://www.hltv.org/match/2290951-uumlberholverbot-legendbots-bot-tournament-2014获取网站内容。获取内容后,我只需要在网站的来源中匹配一个字符串,其中this.content
是检索到的网站的来源,我需要匹配date:"1396706400000", htmlTemplate:
。
正则表达式运行良好,只是它总是返回错误。
public String getCountdown() {
Pattern countdownPattern = Pattern.compile("date:\"(.*?)\", htmlTemplate");
Matcher m = countdownPattern.matcher(this.content);
if (m.find()) {
String time = m.group(1).trim();
return time;
} else {
return "ERROR";
}
谢谢!
答案 0 :(得分:0)
你的模式很好。您的代码还有其他问题,或者输入数据不是您认为的那样。
我建议对模式稍作调整:
"date:\"[^\"]+\", htmlTemplate"
这将是一种更强大的匹配方式。但问题不在于匹配模式。
答案 1 :(得分:0)
实际上,您的代码工作正常,我做了以下事情:
public class MainActivity extends Activity {
String content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(new Runnable() {
@Override
public void run() {
HttpClient httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet("http://www.hltv.org/match/2290951-uumlberholverbot-legendbots-bot-tournament-2014");
try {
HttpResponse response = httpClient.execute(get);
InputStream is = response.getEntity().getContent();
content = inputStreamToString(is);
final TextView message = (TextView) findViewById(R.id.message);
runOnUiThread(new Runnable() {
@Override
public void run() {
message.setText(getCountdown());
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private String inputStreamToString(InputStream is) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
return sb.toString();
}
public String getCountdown() {
Pattern countdownPattern = Pattern.compile("date:\"(.*?)\", htmlTemplate");
Matcher m = countdownPattern.matcher(this.content);
if (m.find()) {
String time = m.group(1).trim();
return time;
} else {
return "ERROR";
}
}
布局:
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Loading..."
android:id="@+id/message" />
</LinearLayout>
只有陷阱是可爱 java方式将HttpResponse
转换为简单String
。有更好/更简单的方法吗?