Home > Back-end >  If-else working unexpectedly in android studio. why?
If-else working unexpectedly in android studio. why?

Time:10-07

I am trying to make an app which takes URL and tells whether this URL is valid or not. (There is no any great intention for making this app but just to learn android development).

I used if-else in button. it must output "if" section but it gives out "else" section.

CODE

TextView tv;
EditText urlScan;
Button btn;
private static final String EXAMPLE_DOT_COM = "[a-z] [\\.]{1}[a-z]{2,3}";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = findViewById(R.id.tv);
    urlScan = findViewById(R.id.webInput);
    btn = findViewById(R.id.btn);


    String webUrl = urlScan.getText().toString();

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (webUrl.equals(EXAMPLE_DOT_COM)){
                tv.setText("Valid URL");
            }
            else {
                tv.setText("Invalid");

            }
        }
    });

}

INPUT google.com

Expected output Valid URL

OUTPUT Invalid

CodePudding user response:

You're comparing a regex pattern to the URL you want to check, which isn't correct. Use regex matching instead:

import java.util.regex.Matcher; // Don't forget to add the required imports
import java.util.regex.Pattern;

TextView tv;
EditText urlScan;
Button btn;
private static final String EXAMPLE_DOT_COM = "[a-z] [\\.]{1}[a-z]{2,3}";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = findViewById(R.id.tv);
    urlScan = findViewById(R.id.webInput);
    btn = findViewById(R.id.btn);


    String webUrl = urlScan.getText().toString();

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            
            // Create a new pattern...
            Pattern pattern = Pattern.compile(EXAMPLE_DOT_COM, Pattern.CASE_INSENSITIVE);

            // Match the URL string...
            Matcher matcher = pattern.matcher(webUrl);
            boolean matchFound = matcher.find();
            
            // Check whether it matches...
            if (matchFound){
                tv.setText("Valid URL");
            }
            else {
                tv.setText("Invalid");

            }
        }
    });

}

Your can learn more about Java Regex here

CodePudding user response:

Don't need to use regex , there is a better option available , use URLUtil.isValidUrl(url) to check if it's a valid url or not

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    tv = findViewById(R.id.tv);
    urlScan = findViewById(R.id.webInput);
    btn = findViewById(R.id.btn);


    String webUrl = urlScan.getText().toString();

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (URLUtil.isValidUrl(url)){
                tv.setText("Valid URL");
            }
            else {
                tv.setText("Invalid");    
            }
        }
    });

}
  • Related