Android中的平等胡说八道
问题是,我希望从调用grabURL的网页中读取的文本与我在onPostExecute中输入到字符串lorem中的文本完全相同 但是安卓说:不,它没有 为什么我认为Android在平等方面是不对的 1 StackTrace屏幕截图: 2截图: 3您可以找到字符串lorem=lorem ipsum dolor sit amet;在我的课堂上向下,浏览我阅读文本的网页的源代码: 我的类的源代码:Android中的平等胡说八道,android,database,equality,http-get,Android,Database,Equality,Http Get,问题是,我希望从调用grabURL的网页中读取的文本与我在onPostExecute中输入到字符串lorem中的文本完全相同 但是安卓说:不,它没有 为什么我认为Android在平等方面是不对的 1 StackTrace屏幕截图: 2截图: 3您可以找到字符串lorem=lorem ipsum dolor sit amet;在我的课堂上向下,浏览我阅读文本的网页的源代码: 我的类的源代码: public class MainActivity extends Activity { /**
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
grabURL("http://www.cyberweb.pp.ua/x/o.html");
}
public void grabURL(String url) {
new GrabURL().execute(url);
}
private class GrabURL extends AsyncTask<String, Void, Void> {
private final HttpClient Client = new DefaultHttpClient();
private String Content;
private String Error = null;
protected Void doInBackground(String... urls) {
try {
HttpGet httpget = new HttpGet(urls[0]);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
Content = Client.execute(httpget, responseHandler);
} catch (ClientProtocolException e) {
Error = e.getMessage();
cancel(true);
} catch (IOException e) {
Error = e.getMessage();
cancel(true);
}
return null;
}
protected void onPostExecute(Void unused) {
String lorem = "Lorem ipsum dolor sit amet";
if (Error != null) {
Toast.makeText(MainActivity.this, Error, Toast.LENGTH_LONG)
.show();
} else {
TextView xyu = (TextView) findViewById(R.id.xyu);
TextView xyu1 = (TextView) findViewById(R.id.xyu1);
TextView xyu2 = (TextView) findViewById(R.id.xyu2);
xyu.setText(Content);
xyu1.setText(lorem);
Log.v("lorem", lorem);
Log.v("Content", Content);
String eq = null;
if (Content.length() != lorem.length()) {
Log.v("length?", "Different length");
}
if (Content.trim().equalsIgnoreCase(lorem.trim())) {
xyu2.setText("EQUAL");
eq = "EQUAL";
Log.v("equal?", eq);
}
else {
xyu2.setText("NOT EQUAL");
eq = "NOT EQUAL";
Log.v("equal?", eq);
}
}
}
}
}
这个问题快把我逼疯了
有人猜会发生什么吗?提前谢谢你
最后堆栈跟踪:
问题是由网页编码引起的。将编码更改为UTF-8时,相等是正确的 不要使用==进行字符串比较
相反,它将实际检查每个字符串的内容并返回正确的结果
if (Content.equals(lorem)) {
//etc...
编辑:如果您仍然无法获得相等值,可以尝试以下操作:
if (Content.trim().equalsIgnoreCase(lorem.trim())) {
//etc...
这将修剪所有空白并执行检查,而不考虑大小写。您最多只能检查两个字符串。在Java中不能使用==来比较字符串。使用相等
这里的答案非常详细地描述了原因:尝试比较长度:
final int cl = Content.length();
final int ll = lorem.length();
if (cl != ll) {
Log.v("TAG", "Different length (Content=" + cl + ", lorem=" + ll + ")");
}
我们可以肯定的是,Java的String.equals方法可以工作。唯一的胡说八道可能是在你的代码中…谢谢,但这不是一个原因,我已经更新了代码,它仍然不相等,这是一个很大的原因,但显然还有更多。。。可能URL行末尾有空白,请尝试:Content.trim.equalslorem.谢谢,但这不是原因,我已经更新了代码,但仍然不相等。当字符串确实不相等时,您可以尝试修剪。我同意a-C。可能有一些隐藏字符可能会模糊您的结果。制表符,换行符,等等,这是我的第一个假设,我检查了所有地方的拼写并添加了内容。trim.equalsIgnoreCaselorem.trim。。。没有任何更改。@IvanFazaniuk Content.trim.length呢!=lorem.长度?Sam的长度不同,但不相等。此问题是否与网页编码有关?@dtmilano内容比lorem多一个字符。总是即使我在网页和lorem字符串中只留下了一个字母L。@IvanFazaniuk我也只能假设存在某种类型的空白字符,trim不会删除它。但我不知道那是什么。。。这可能会有所帮助:。如果只有一个尾随字符,则可以使用Content=Content.substring0,Content.length-1;但这假设角色将永远在那里…谢谢你们所有人给我的想法方向的建议,我现在要寻找那个秘密符号: