在Java中比较字符串

9

我想要比较两个EditText框中的值。我希望只需要比较passw1 = passw2。由于我的代码正在比较我输入的两个字符串,因此我无法进行比较。

 final EditText passw1= (EditText) findViewById(R.id.passw1);
 final EditText passw2= (EditText) findViewById(R.id.passw2);
 Button buttoks = (Button) findViewById(R.id.Ok);
      buttoks.setOnClickListener(new OnClickListener() {    

    public void onClick(View v) {       

     if (passw1.toString().equalsIgnoreCase("1234") && passw2.toString().equalsIgnoreCase("1234")){
      Toast.makeText(getApplication(),"Username and password match", Toast.LENGTH_SHORT).show();
      }
    else {
        Toast.makeText(getApplication(),"Username and password doesn't match", Toast.LENGTH_SHORT).show();
      }
     }   }); 
9个回答

35

使用“==”运算符将比较字符串的引用而不是字符串本身。

好的,你需要对Editable执行toString()操作。我加载了一些以前处理这种情况的代码。

String passwd1Text = passw1.getText().toString();
String passwd2Text = passw2.getText().toString();

if (passwd1Text.equals(passwd2Text))
{
}

我尝试过了,但当它们匹配时仍然会出现其他消息。 - M2Gd

17
[编辑] 我之前犯了一个错误,因为获取文本需要使用 .getText().toString()。 下面是一个完整的工作示例:
package com.psegina.passwordTest01;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;

public class Main extends Activity implements OnClickListener {
    LinearLayout l;
    EditText user;
    EditText pwd;
    Button btn;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        l = new LinearLayout(this);
        user = new EditText(this);
        pwd = new EditText(this);
        btn = new Button(this);

        l.addView(user);
        l.addView(pwd);
        l.addView(btn);
        btn.setOnClickListener(this);

        setContentView(l);
    }

    public void onClick(View v){
        String u = user.getText().toString();
        String p = pwd.getText().toString();
        if( u.equals( p ) )
            Toast.makeText(getApplicationContext(), "Matches", Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(getApplicationContext(), user.getText()+" != "+pwd.getText(), Toast.LENGTH_SHORT).show();
    }
}
尝试使用 .getText() 替代 .toString()。
if( passw1.getText() == passw2.getText() )
#do something

.toString() 返回整个对象的字符串表示形式,这意味着它不会返回您在字段中输入的文本(通过添加 Toast 来查看 .toString() 的输出)。


我尝试过这个,但是无论它们是否匹配,我都得到的结果是它们不匹配。 - M2Gd
你能发布一下包含getText()的代码块以及Log.d("test", passw1.getText())和Log.d("test", passw2.getText())输出的内容吗? - mrPjer
另外,您可以尝试以下代码:if( (passw1.getText()).equals(passw2.getText()) ) - mrPjer
public void onClick(View v) {
if( passw1.getText() == passw2.getText() ){ Toast.makeText(getApplication(),"用户名和密码匹配", Toast.LENGTH_SHORT).show(); } else{ Toast.makeText(getApplication(),"用户名和密码不匹配", Toast.LENGTH_SHORT).show(); }}
- M2Gd
我编辑了答案,并提供了一个完整的工作示例,应该可以满足您的要求。 - mrPjer
@mrPer 我修改了答案,因为最后一个例子中有一个打字错误,使用了 == 而不是 equals()。 - Flávio Etrusco

6

在onclick函数中,将第一行替换为这一行,您一定会得到正确的结果。

如果(passw1.getText().toString().equalsIgnoreCase("1234") && passw2.getText().toString().equalsIgnoreCase("1234")){


3

您可以使用Java的equals()方法来比较值:

public void onClick(View v) {
    // TODO Auto-generated method stub

    s1=text1.getText().toString();
    s2=text2.getText().toString();

    if(s1.equals(s2))
        Show.setText("Are Equal");
    else
        Show.setText("Not Equal");
}

2

您需要同时使用getText()和toString()方法,将Editable对象转换为字符串进行匹配。

因此,您需要使用passw1.getText().toString().equalsIgnoreCase("1234"),而不是passw1.toString().equalsIgnoreCase("1234")


1
您可以使用String.compareTo(String)方法,它返回一个负数(<),零(=)或正数(>)的整数。
使用方式如下:
您可以使用String.compareTo(String)方法,它返回一个负数(<),零(=)或正数(>)的整数。
使用方式如下:
  String a="myWord";
  if(a.compareTo(another_string) <0){
    //a is strictly < to another_string
  }
  else if (a.compareTo(another_string) == 0){
    //a equals to another_string
  }
else{
  // a is strictly > than another_string
}    

1

在使用.equals()之前,请先尝试使用.trim(),或创建一个新的字符串变量来包含这些内容。


0
String password=passw1.trim();
if (password.equalsIgnoreCase("1234")){
      Toast.makeText(getApplication(),"Username and password match", Toast.LENGTH_SHORT).show();
}

你需要在字符串中使用 trim 方法。

0

我这里也做了同样的事情,需要显示两次“成功” 响应是来自PHP的数据

 String res=response.toString().trim;

                            Toast.makeText(sign_in.this,res,Toast.LENGTH_SHORT).show();
    if ( res.compareTo("success")==0){
    Toast.makeText(this,res,Toast.LENGTH_SHORT).show();
    }

这不是问题的正确答案。 - poohdedoo
尝试:string res = response.toString().trim() - A_rmas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接