子字符只能是字母,数字,美元符号或下划线的成员。
给定一个字符串,确定它是否是有效的标识符。我完成了大部分工作。
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
答案 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-z
和A-Z
以及_
或$
范围内的一个字符。
[\\w_$]
匹配a-z
,A-Z
和0-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
}