4

如果用户必须只输入字符串,输入中不包含整数和符号,如何捕获整数?先生,请帮我做我的初学者报告。

import java.util.*;
public class NameOfStudent {


    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        String name = "";

        System.out.print("Please enter your name: ");
        name = input.nextLine(); // How to express error if the Strin contains
                                //integer or Symbol?...

        name = name.toLowerCase();

        switch(name)
        {
        case "cj": System.out.print("Hi CJ!");
        break;
        case "maria": System.out.print("Hi Maria!");
        break;
        }

    }

}
4

9 回答 9

3

使用这个正则表达式。

检查字符串是否包含数字/符号等。

boolean result = false;  
Pattern pattern = Pattern.compile("^[a-zA-Z]+$");  
Matcher matcher = pattern.matcher("fgdfgfGHGHKJ68"); // Your String should come here
if(matcher.find())  
    result = true;// There is only Alphabets in your input string
else{  
    result = false;// your string Contains some number/special char etc..
}

抛出自定义异常

在java中抛出自定义异常

try-catch 的工作

try{
    if(!matcher.find()){ // If string contains any number/symbols etc...
        throw new Exception("Not a perfect String");
    }
        //This will not be executed if exception occurs
    System.out.println("This will not be executed if exception occurs");

}catch(Exception e){
    System.out.println(e.toString());
}

我只是概述了 try-catch 的工作原理。但是你永远不应该使用一般的“例外”。始终将您自定义的异常用于您自己的异常。

于 2013-09-10T06:37:17.907 回答
1

一旦您掌握了字符串,例如名称,您可以对其应用正则表达式,如下所示。

    String name = "your string";
    if(name .matches(".*\\d.*")){
        System.out.println("'"+name +"' contains digit");
    } else{
        System.out.println("'"+name +"' does not contain a digit");
    }

根据您的需要调整逻辑检查。

于 2013-09-10T06:44:52.050 回答
1

请注意,字符串可以包含数字字符,并且它仍然是字符串

String str = "123";

我认为您在问题中的意思是“如何强制执行字母用户输入,没有数字或符号”,这可以使用正则表达式轻松完成

Pattern pattern = Pattern.compile("^[a-zA-Z]+$"); // will not match empty string
Matcher matcher = pattern.matcher(str);
bool isAlphabetOnly = matcher.find();
于 2013-09-10T06:47:12.190 回答
1

使用Regexwhich 是形成搜索模式的字符序列:

Pattern pattern = Pattern.compile("^[a-zA-Z]*$");
Matcher matcher = pattern.matcher("ABCD");
System.out.println("Input String matches regex - "+matcher.find());

解释:

^         start of string
A-Z       Anything from 'A' to 'Z', meaning A, B, C, ... Z
a-z       Anything from 'a' to 'z', meaning a, b, c, ... z
*         matches zero or more occurrences of the character in a row
$         end of string

如果您还想检查空字符串,请将 * 替换为 +


如果你想在没有regexthen 的情况下这样做:

public boolean isAlpha(String name) 
{
    char[] chars = name.toCharArray();

    for (char c : chars) 
    {
         if(!Character.isLetter(c)) 
         {
                return false;
         }
    }

    return true;
}
于 2013-09-10T06:39:28.553 回答
0

您可以按如下方式更改代码。

    Scanner input=new Scanner(System.in);
    System.out.print("Please enter your name: ");
    String name = input.nextLine();
    Pattern p=Pattern.compile("^[a-zA-Z]*$");// This will consider your 
                                                input String or not 
    Matcher m=p.matcher(name);
    if(m.find()){
        // your implementation for String.
    } else {
        System.out.println("Name should not contains numbers or symbols ");

    }

按照这个链接了解更多关于Regex的信息。并从这里自己测试一些正则表达式。

于 2013-09-10T07:09:38.683 回答
0

在 Java 中,您可以制定 String 允许在正则表达式中包含的内容。然后检查字符串是否包含允许的序列 - 并且仅包含允许的序列。

您的代码如下所示。我添加了一个 do-while-loop 到它:

    Scanner input = new Scanner(System.in);
    String name = "";

    do { // get input and check for correctness. If not correct, retry
        System.out.print("Please enter your name: ");
        name = input.nextLine(); // How to express error if the String contains
                                //integer or Symbol?...

        name = name.toLowerCase();
    } while(!name.matches("^[a-z][a-z ]*[a-z]?$"));
    // The above regexp allows only non-empty a-z and space, e.g. "anna maria"
    // It does not allow extra chars at beginning or end and must begin and end with a-z

    switch(name)
    {
    case "cj": System.out.print("Hi CJ!");
    break;
    case "maria": System.out.print("Hi Maria!");
    break;
    }

现在您可以更改正则表达式,例如允许使用亚洲字符集的名称。看看这里如何处理预定义的字符集。我曾经在任何文本中检查任何语言(以及 UTF-8 字符集的任何部分)的单词,并最终使用这样的正则表达式来查找文本中的单词:"(\\p{L}|\\p{M})+"

于 2013-09-10T07:27:48.093 回答
0

如果我们想检查两个不同的用户在注册时是否输入了相同的电子邮件ID.....

公共用户 updateUsereMail(UserDTO updateUser) 抛出 IllegalArgumentException { System.out.println(updateUser.getId());

    User existedUser = userRepository.findOneById(updateUser.getId());
    Optional<User> user = userRepository.findOneByEmail(updateUser.getEmail());
    if (!user.isPresent()) {
        existedUser.setEmail(updateUser.getEmail());
        userRepository.save(existedUser);
    } else {
        throw EmailException("Already exists");
    }

    return existedUser;
}
于 2019-01-07T15:28:16.950 回答
0
    Scanner s = new Scanner(System.in);
    String name;

    System.out.println("enter your name => ");
    name = s.next();

    try{
        if(!name.matches("^[a-zA-Z]+$")){
            throw new Exception("is wrong input!");
        }else{
            System.out.println("perfect!");
        }
    }catch(Exception e){
        System.out.println(e.toString());
    }
于 2020-04-10T13:41:45.927 回答
-1

嗯..尝试将值存储在数组中..对于每个单个值,使用 isLetter() 和 isDigit() ..然后用该数组构造一个新字符串

在这里使用 try catch 看看!我不习惯 Pattern 类,如果那更简单,请使用它

于 2013-09-10T07:14:46.593 回答