【问题标题】:checking for is letter in a string检查字符串中的字母
【发布时间】:2011-08-16 16:50:02
【问题描述】:

我要求用户输入字符串,我想检查是字母还是数字,但我是 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>

我知道这很容易解决?

【问题讨论】:

标签: java string character java.util.scanner


【解决方案1】:

您应该使用以下命令导入扫描仪,而不是顶部的 Scanner scanner = new Scanner(System.in);import java.util.Scanner; 在最顶端。

【讨论】:

    【解决方案2】:
    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() 方法属于字符数组。

    【讨论】:

      【解决方案3】:

      isLetter() 方法测试字符而不是字符串。首先确保你在谈论正确的类型。这只是问题的一部分。首先将您的字符串更改为一个字符,然后再回复我们。

      还要记住这一点:你必须使用这种格式Character.isLetter(s.charAt(charCount));

      这是因为isLetter()Character 类而不是String 类的成员方法。 您必须在开头使用Character,因为您使用的是Character 类的成员函数。如果你使用了一个对象,比如 a、b 或者你的字符变量是什么 它会告诉您该字符变量不能被取消引用。也许这与isLetter() 是类方法而不是对象方法这一事实有关。

      至于静态上下文,它必须与您的主要方法被声明为静态但您的其他方法不是这一事实有关。我无法向你完全解释这一点,但它 只是一个提示。

      【讨论】:

        【解决方案4】:

        我暂时假设在 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) 声明为静态 - 因为它不是静态的,所以它属于类的 实例而不是班级本身。静态方法只能调用静态方法,除非它们正在调用实例上的方法。因此,

        非静态方法 isletter(java.lang.String) 不能 b e 从静态上下文中引用

        表示 isletter 应该附加一个静态修饰符: public static void isletter(String s)

        下一个错误是一样的。

        最后,方法 isletter(String s) 调用一个带有字符 (char) 的方法。您还没有定义方法 isletter(char character),也不是静态的 - 因为它是通过静态方法调用的,所以它也必须设为静态。

        我希望这能回答您关于编译错误的问题。

        【讨论】:

          【解决方案5】:

          也许你的意思是像这样使用 Character 类的 isLetter() 方法:

           if(Character.isLetter(s.charAt(i))){
          
            }
          

          【讨论】:

            【解决方案6】:

            您应该首先将“isletter”定义为静态。 在 Java 中保持大小写为 lowerThenUpper 也是一个好习惯。 除此之外,可能请参阅 Zach 的回答。

            【讨论】:

              【解决方案7】:

              代替函数 isLetter(),试试 s.matches("[A-Za-z]")。

              这是一个字符串函数,如果字符串与提供的正则表达式匹配,则重新运行 true。

              编辑:您将需要更改您的正则表达式以接受长度值大于一的字符串。

              【讨论】:

                【解决方案8】:

                isLetter 中,L 应为小写。 (l)。

                if (isLetter(s.charAt(i) ) )
                   // ^ lowercase 
                

                抛开这个错误,你为什么要在循环中递归调用方法isletter

                【讨论】:

                • 即:if (isLetter(s.charAt(i) ) ) {中的L
                猜你喜欢
                • 1970-01-01
                • 2013-10-19
                • 1970-01-01
                • 1970-01-01
                • 2016-07-06
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多