我要求用户输入一个字符串,我想检查是alpha还是数字,但我是java新手。这就是我到目前为止所拥有的
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
isletter(s); // a call to the function
// function
public void isletter(String s)
{
for (int i = 0; i < s.length(); i++)
if (isLetter(s.charAt(i) ) ) {
System.out.println("is alpha = " + s);
}
else{
}
}
这是我在尝试通过dos编译时遇到的错误
c:\programming>javac LexemesTokenizer4.java
LexemesTokenizer4.java:62: non-static method isletter(java.lang.String) cannot b
e referenced from a static context
isletter(s);
^
LexemesTokenizer4.java:71: non-static method isletter(java.lang.String) cannot b
e referenced from a static context
isletter(s);
^
LexemesTokenizer4.java:85: cannot find symbol
symbol : method isLetter(char)
location: class LexemesTokenizer4
if (isLetter(s.charAt(i) ) ) {
^
3 errors
c:\programming>
我知道这是一个简单的解决办法吗?
答案 0 :(得分:2)
在isLetter
中,L
应为小写。 (l
)。
if (isLetter(s.charAt(i) ) )
// ^ lowercase
除了这个错误之外,你为什么要在循环中递归调用方法isletter
。
答案 1 :(得分:1)
也许您的意思是使用Character类的isLetter()方法,如下所示:
if(Character.isLetter(s.charAt(i))){
}
答案 2 :(得分:1)
您应该使用以下方法导入扫描仪,而不是顶部的Scanner scanner = new Scanner(System.in);
:
import java.util.Scanner;
在最上面。
答案 3 :(得分:0)
代替函数isLetter(),尝试s.matches(“[A-Za-z]”)。
这是一个字符串函数,如果字符串与提供的正则表达式匹配,则重新运行true。
编辑:您需要更改正则表达式以接受长度值大于1的字符串。
答案 4 :(得分:0)
首先应将“isletter”定义为静态。 在Java中保持套管到lowerThenUpper也是一个好习惯。 除此之外,请参阅Zach的答案。
答案 5 :(得分:0)
我现在假设在main方法中定义了以下代码:
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
isletter(s); // a call to the function
发生第一次编译错误是因为main方法被定义为以下签名:public static void main(String [] args)(在Java 5 +中也可以使用varargs)。
这意味着,由于您的静态方法正在调用isletter(s),因此isletter(s)必须声明为static - 因为它不是静态的,它属于该类的实例而不是班级本身。静态方法只能调用静态方法,除非它们在实例上调用方法。因此,
非静态方法isletter(java.lang.String)不能b e从静态上下文引用
表示isletter应附加一个静态修饰符: public static void isletter(String s)
下一个错误是相同的。
最后,方法isletter(String s)调用带有字符(char)的方法。你没有定义方法isletter(char字符),也不是静态的 - 因为它是通过静态方法调用的,它也必须是静态的。
我希望这能解答您关于编译错误的问题。
答案 6 :(得分:0)
方法isLetter()
测试字符而不是字符串。确保首先谈论的是正确的类型。这只是问题的一部分。首先将字符串更改为字符然后返回给我们。
还要记住:您必须使用此格式Character.isLetter(s.charAt(charCount));
这是因为isLetter()
是Character
类的成员方法,而不是String
类。
您必须在开头使用Character
,因为您正在使用Character
类的成员函数。如果您使用了诸如a,b之类的对象或任何您的字符变量
它会告诉您该字符变量无法取消引用。也许这与isLetter()
是一种类方法而不是对象方法这一事实有关。
至于静态上下文,它必须对你的main方法声明为静态但你的其他方法不是静态的事实做了些什么。我不能完全向你解释,但它 只是一个暗示。
答案 7 :(得分:0)
public class Demo {
public static void main(String[] arg) {
char st[] = { 'o', '2', 'A', 'b' };
for (int i = 0; i < st.length; i++) {
if (Character.isLetter(st[i])) {
System.out.println("Character At:" + i + "\t" + st[i]);
}
else {
System.out.println("Integer At:" + i + "\t" + st[i]);
}
}
}
}
isLetter()方法属于Character数组。