如果String包含字母之间的空格,如何返回false?

时间:2016-02-02 01:27:25

标签: java

子字符只能是字母,数字,美元符号或下划线的成员。

给定一个字符串,确定它是否是有效的标识符。我完成了大部分工作。

public class IdentifierChecker {
    public static boolean isValid(String idn) {
        // here's your code...
        boolean valid = false;

        if (idn.length() > 0) {
            char firstChar = idn.charAt(0);

            if (Character.isLetter(firstChar) || firstChar == '_'
                    || firstChar == '$') {

                for (int i = 1; i < idn.length(); i++) {
                    if (Character.isLetter(idn.charAt(i))
                            || Character.isDigit(idn.charAt(i))
                            || firstChar == '_' || firstChar == '$') {
                        valid = true;
                    } else {
                        valid = false;
                    }
                }
            }
        }
        return valid;
    }
}

以下是有效标识符的语法:

每个标识符必须至少包含一个字符。

必须从以下字符中选择第一个字符:字母,下划线或美元符号。第一个字符不能是数字。

其余字符(除第一个字符外)可以来自:字母,数字,下划线或美元符号。换句话说,它可以是任何有效的标识符字符。

有效标识符的示例:

i
wo_rd
b2h

无效标识符的示例:

1i
wo rd
!b2h

4 个答案:

答案 0 :(得分:0)

在你的else块中,由于任何无效条件都会导致整个字符串无效,因此添加

break;

之后

valid = false;

在你的else块中。

设置返回值,并停止for循环的进一步循环。

答案 1 :(得分:0)

声明:

               if (Character.isLetter(idn.charAt(i))
                        || Character.isDigit(idn.charAt(i))
                        || firstChar == '_' || firstChar == '$')

应该是:

               if (Character.isLetter(idn.charAt(i))
                        || Character.isDigit(idn.charAt(i))
                        || idn.charAt(i) == '_' || idn.charAt(i) == '$')

因为你会拒绝使用'_'或'$'的标识符,而不是在开头。此外,一旦valid设置为false,您应该停止循环,否则有效将基于标识符中的最后一个字符。

答案 2 :(得分:0)

请尝试以下代码:

public class IdentifierChecker {

    public static void main(String[] args) {
        System.out.println(isValid("i"));
        System.out.println(isValid("wo_rd"));
        System.out.println(isValid("b2h"));
        System.out.println(isValid("1i"));
        System.out.println(isValid("wo rd"));
        System.out.println(isValid("!b2h"));
        System.out.println(isValid(""));

    }

    public static boolean isValid(String idn) {
        // here's your code...
        boolean valid = false;

        if (idn.length() > 0) {
            char firstChar = idn.charAt(0);
            if (Character.isLetter(firstChar) || firstChar == '_' || firstChar == '$') {
                for (int i = 0; i < idn.length(); i++) {
                    if (Character.isLetter(idn.charAt(i)) || Character.isDigit(idn.charAt(i)) || idn.charAt(i) == '_' || idn.charAt(i) == '$') {
                        valid = true;
                    } else {
                        valid = false;
                        break;
                    }
                }
            }
        }
        return valid;
    }
}

答案 3 :(得分:0)

使用正则表达式,您只需执行以下操作:

static final Pattern PATTERN = Pattern.compile("[a-zA-Z_$][\\w_$]*");

static boolean isValid(String idn) {
  return PATTERN.matcher(idn).matches();
}

[a-zA-Z_$]只匹配a-zA-Z以及_$范围内的一个字符。

[\\w_$]匹配a-zA-Z0-9以及_$范围内的零个或多个字符。

测试:

public static void main(String[] args) {
  // valid identifiers:
  System.out.println(isValid("i")); // true
  System.out.println(isValid("wo_rd")); // true
  System.out.println(isValid("b2h")); // true
  // invalid identifiers:
  System.out.println(isValid("1i")); // false
  System.out.println(isValid("wo rd")); // false
  System.out.println(isValid("!b2h")); // false
  System.out.println(isValid("")); // false
}