如何正确编写将字符串解析为字符的 if 语句,Java。

huangapple go评论75阅读模式
英文:

How to correctly write if statement parsing a string to char, java

问题

以下是您要翻译的内容:

我正在使用 Java 编写一个布尔方法来验证用户输入是否正确只有在首次输入为字母 A-D且第二次输入为数字 1-4 时输入才被视为正确例如B3)。当我设置我的 if 语句时旁边出现了一个错误显示在参数类型为 charboolean 时未定义运算符 ==”。我无法弄清楚我的错误在哪里以下是代码片段

public static boolean isValid(String s) {
    if (!isUpperCase(s)) {
        s = s.toUpperCase();
    }
    if (s.length() < 2) {
        if (s.charAt(0) >= 'A' && s.charAt(0) <= 'D') { // 这是我第一次出错的地方
            if (s.charAt(1) >= '1' && s.charAt(1) <= '4') { // 这是我第二次出错的地方
                return true;
            }
        }
    }
    return false;    
}

请原谅我的无知,因为我是一个初学者的编码者,不懂所有的术语。

英文:

I am coding in java a boolean method to validate user input is correct. It is correct if the first thing typed is a letter A-D and the second thing typed is 1-4 (e.g. B3). When I set up my if statements I am getting an error next to them that say "The operator == is undefined for the argument type(s) char, boolean". I cannot figure out what I am doing wrong. Here is the snippet of code.

public static boolean isValid(String s) {
	if (!isUpperCase(s)) {
		s = s.toUpperCase();
	}
	if (s.length() &lt; 2) {
		if (s.charAt(0) == &#39;A&#39; &lt;= &#39;D&#39;) { // here is the first place I&#39;m getting the error
			
			if (s.charAt(1) &gt;= 1 &lt;= 4) { // here is the second place I&#39;m getting a similar error
				return true;
			}
		}
	}
	return false;	
}

Please excuse my ignorance as I am a novice coder and do not know all the terminology

答案1

得分: 1

可以使用String方法matches来使用正则表达式:

private static boolean isValid(String s) {
    return null != s && s.matches("(?i)[A-D][1-4]");
}

其中:
(?i) - 启用不区分大小写的匹配
[A-D][1-4] - 一个在区间[A..D]内的单个字母,后面跟着一个在区间[1..4]内的单个数字

英文:

It is possible to use String method matches which uses a regular expression:

private static boolean isValid(String s) {
    return null != s &amp;&amp; s.matches(&quot;(?i)[A-D][1-4]&quot;);
}

where<br/>
(?i) - enable case-insensitive matching<br/>
[A-D][1-4] - a single letter in range [A..D] followed by a single digit in range [1..4]

答案2

得分: 0

以下是翻译好的部分:

你必须在 if 语句中指定两个变量或常量。你可以使用逻辑运算符如 AND(&&)或 OR(||)来连接这些配对。

你不需要测试字符串是否为大写。如果字母已经是大写的,将其转换为大写不会改变任何内容。

以下是你的方法。

public static boolean isValid(String s) {
    if (s.length() < 2) {
        s = s.toUpperCase();
        if (s.charAt(0) >= 'A' && s.charAt(0) <= 'D') {
            if (s.charAt(1) >= '1' && s.charAt(1) <= '4') {
                return true;
            }
        }
    }

    return false;
}
英文:

You have to specify two variables or constants in an if statement. You can connect pairs with logical operators like AND (&&) or OR (||).

You don't need to test if the String is upper case. Converting it to upper case won't change anything if the letter is already in upper case.

Here's your method.

public static boolean isValid(String s) {
	if (s.length() &lt; 2) {
		s = s.toUpperCase();
		if (s.charAt(0) &gt;= &#39;A&#39; &amp;&amp; s.charAt(0) &lt;= &#39;D&#39;) {
			if (s.charAt(1) &gt;= &#39;1&#39; &amp;&amp; s.charAt(1) &lt;= &#39;4&#39;) {
				return true;
			}
		}
	}

	return false;
}

答案3

得分: 0

尽管现在有两种提供的解决方案,但我没有看到任何一个解释问题出在哪里。因此,我想解释一下:问题在于您编写的 if 语句的方式。当您写 if (s.charAt(0) == 'A' <= 'D') 时,这个 if 语句似乎在比较一个字符和一个布尔值。因为 'A' <= 'D' 被视为一个真值布尔表达式。

有了这个前提,您可以使用 && 并检查您的字符是否满足 char >= A && char <= D

英文:

Even though there are two offered solutions right now, I didn't see any of them explaining why there's a problem. Thus I want to explain: The problem is the way you write your if statements. When you say if (s.charAt(0) == &#39;A&#39; &lt;= &#39;D&#39;), the if feels like it is comparing a char and a boolean. Because 'A' <= 'D' is perceived as a true boolean statement.

With that said, you can use &amp;&amp; and check if your char is char &gt;= A &amp;&amp; char &lt;= D

huangapple
  • 本文由 发表于 2020年10月8日 04:14:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/64251665.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定