【问题标题】:Checking if string contains letters检查字符串是否包含字母
【发布时间】:2015-01-04 23:51:16
【问题描述】:

所以我无法终生解决这个问题。我正在尝试编写一个提示用户输入电话号码的程序。这将作为字符串输入,并稍后在程序中转换为整数数组。但是,我现在遇到的情况是仅验证用户输入的字符串!!!包含 2-9 的数字。我已经尝试过 .contains 方法和 .match 方法,但是使用它们总是会给我带来错误的结果。如果有人可以请阐明如何解决这个问题,我将不胜感激。提前致谢。

这是我目前所拥有的:

Scanner user_input = new Scanner(System.in);
String number = user_input.nextLine();

if(number.contains("[2-9]+")) {
    for(int count = 0; count < number.length(); count++) {
        digits[count] = number.charAt(count)-'0';
    }

    System.out.println(Arrays.toString(digits));

    //printWord(digits, out, length, 0);
} else {
    System.out.println("Invalid phone number!");
    System.exit(0);
}

【问题讨论】:

  • 改用正则表达式。
  • @cychoi 他正在尝试。他不知道的是contains不接受正则表达式
  • 如果number.matches("[2-9]+") 不适合您,请提供一个失败的示例。
  • 是的,哈哈,我很愚蠢,现在开始工作了。很抱歉,当我应该使用 match 方法时,我使用了 contains 方法。谢谢大家的反馈。

标签: java string input contains digits


【解决方案1】:

您可以创建一个类似onlyDigits(String) 的方法并使用Pattern 与您提供的正则表达式类似

private static Pattern pattern = Pattern.compile("[2-9]+");

public static boolean onlyDigits(String in) {
    Matcher m = pattern.matcher(in);
    return m.matches();
}

那么你可以这样称呼它

public static void main(String[] args) {
    System.out.println(onlyDigits("123"));
    System.out.println(onlyDigits("123a"));
    System.out.println(onlyDigits("234"));
}

【讨论】:

  • string.matches("[2-9]+")相比有什么优势?
  • @Tom 您不会在每次比较时重新编译模式。它的效率略高。
【解决方案2】:

试试这个:

String regex = "[2-9]+";
number.matches(regex);

【讨论】:

  • 字符串正则表达式 = "[2-9]+";
【解决方案3】:

您可以检查以确保给定的输入在字符范围内,例如:

Scanner user_input = new Scanner(System.in);
String number = user_input.nextLine();

for(int i=0; i<number.length;i++){
   if(number.charAt(i) >= '2' && number.charAt(i) <= '9') {
        digits[i] = number.charAt(i)-'0';
    }
} else {
    System.out.println("Invalid phone number!");
    System.exit(0);
   }
}
//printWord(digits, out, length, 0);
System.out.println(Arrays.toString(digits));

【讨论】:

    【解决方案4】:

    您可以将正则表达式与Pattern 类一起使用,该类具有Pattern.matches(String regex, CharSequence input) 方法。你可以做类似的事情

    public static void main(String[] args) {
        System.out.println("Enter phone number");
        Scanner input = new Scanner(System.in);
        String phoneNumber = input.nextLine();                            
        System.out.println(Pattern.matches("[2-9]+", phoneNumber));
    }
    

    您可以选择适合您需要的正则表达式。例如,

    • 上面的[2-9]+ 匹配一组合法字符 2、3、...、9 中至少一个字符的序列
    • [2-9]* 将匹配该集中出现 0 次或多次出现的字符
    • [2-9]{n} 将匹配 n 出现次数

    【讨论】:

      【解决方案5】:

      如果所有字符都是数字,number.matches("\\d+"); 将返回 true;空字符串将返回 false

      【讨论】:

        猜你喜欢
        • 2011-07-11
        • 1970-01-01
        • 2020-12-12
        • 2014-07-16
        • 2011-05-08
        • 1970-01-01
        • 2016-05-19
        • 2014-04-22
        相关资源
        最近更新 更多