0

grabURL問題は、呼び出し元のWebページから読み取ったテキストが、に入力したテキストと完全に等しいことを期待していることString loremですonPostExecute

しかし、Androidは「いいえ、そうではありません!」と言っています。

Androidが平等について正しくないと思うのはなぜですか?

1)StackTraceスクリーンショット:

スタックトレース

2)スクリーン写真:

等しくない

3)私のクラスで下を見つけString lorem = "Lorem ipsum dolor sit amet";て、私がテキストを読んでいるWebページのソースコードを調べてください。

ソースコード

私のクラスのソースコード:

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);
                }

            }
        }

    }
}

この問題は私を悩ませています。

誰かが何が起こるかを推測しますか?前もって感謝します!

最後のスタックトレース:

ここに画像の説明を入力してください

この問題は、Webページのエンコーディングが原因で発生しました。エンコーディングをに変更すると、等式は正しくなり UTF-8ます。

4

3 に答える 3

3

==Javaで文字列を比較するために使用することはできません。を使用しequals()ます。

ここでの答えは、その理由を非常に詳細に説明しています。Javaで文字列を比較するにはどうすればよいですか。

于 2013-01-06T22:32:06.750 に答える
3

長さも比較してみてください:

final int cl = Content.length();
final int ll = lorem.length();
if (cl != ll) {
   Log.v("TAG", "Different length (Content=" + cl + ", lorem=" + ll + ")");
}
于 2013-01-06T22:44:17.133 に答える
2

==文字列の比較には使用しないでください。

代わりに使用.equals()すると、実際に各文字列の内容がチェックされ、適切な結果が返されます。

if (Content.equals(lorem)) {
    //etc...

編集:それでも平等が得られない場合は、これを試すことができます:

if (Content.trim().equalsIgnoreCase(lorem.trim())) {
        //etc...

これにより、すべての空白が削除され、大文字小文字に関係なくチェックが実行されます。2つの文字列をチェックするためにできることはほとんどです。

于 2013-01-06T22:31:52.370 に答える