Android Studio中判断URL有效性的if-else逻辑运行异常是什么原因?
问题原因
- 输入内容获取时机错误
你将String webUrl = urlScan.getText().toString()写在了onCreate生命周期方法中,只会在Activity初始化时读取一次输入框内容,此时用户还没有输入内容,拿到的是空值,点击按钮时也不会重新获取用户最新输入的内容。 - 正则匹配逻辑错误
equals()方法用于判断两个字符串的内容是否完全相等,你当前的逻辑是把用户输入和正则表达式的字符串本身做相等对比,自然不可能匹配成功,判断字符串是否符合正则规则需要使用matches()方法。
修正后代码
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); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 点击按钮时再获取最新的输入内容 String webUrl = urlScan.getText().toString().trim(); // 使用matches方法做正则匹配 if (webUrl.matches(EXAMPLE_DOT_COM)){ tv.setText("Valid URL"); } else { tv.setText("Invalid"); } } }); }
补充说明
如果需要支持输入带大写字母的域名(比如Google.com),可以在获取输入后先转成小写,或者修改正则规则增加大写字母的匹配范围。
内容的提问来源于stack exchange,提问作者Get_ Maths
相关产品推荐
相关产品推荐

