检查是字符串中的字母

时间:2011-05-02 01:29:20

标签: java string character java.util.scanner

我要求用户输入一个字符串,我想检查是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>

我知道这是一个简单的解决办法吗?

8 个答案:

答案 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数组。