【问题标题】:I want to know how to find a special character in a string我想知道如何在字符串中查找特殊字符
【发布时间】:2023-03-16 20:12:01
【问题描述】:

我在 Eclipse 中使用 Java 编程,我想要求用户输入他们的特定 ID,该 ID 以大写 G 开头并有 8 位数字。像 G34466567。如果用户输入了一个无效的 ID,这将是一个错误。如何区分有效身份证件和其他身份证件?

【问题讨论】:

  • 欢迎使用 Stackoverflow。请向我们展示您已经尝试过的一些尝试。
  • 我认为最好将字符串(ID)转换为数组。首先检查 array[0] 并确保它是 G ,然后检查其他以确保它们是数字.因为我是初学者,所以我不知道如何将这些作为语法。

标签: java


【解决方案1】:

您可以使用正则表达式。此模式检查第一个字符是否为大写 G 并且后面有 8 位数字:

([G]{1})([0-9]{8})$

如您所见,有两个表达式由() 分隔。第一个说“只有一个字符,这个字符必须是大写 G”。第二个说,后面必须有8位数字,数字可以从0到9。

每个条件都包含两个“部分”。 [] 的第一个定义了允许使用的字符。 {} 中的模式显示了多少次。 $ 表示最大长度为 9,并且不能有更多字符。

所以你可以读到这样的条件:

([which chars are allowed]{How many chars are allowed})
^------------------------\/---------------------------^
                    One condition

而在 Java 中你是这样使用它的:

String test= "G12345678";
boolean isValid = Pattern.matches("([G]{1})([0-9]{8})$", test);

如您所见,matches 方法采用两个参数。第一个参数是regex,第二个参数是要检查的字符串。如果字符串与模式匹配,则返回 true。

【讨论】:

  • 我需要更多有关此语法的帮助。
  • 我已经在我的回答中描述过了。
【解决方案2】:

创建一个数组列表。要求用户输入 ID,检查它是否已经在列表中,忽略,否则将该 ID 添加到列表中。

编辑:为了确保字符串 ID 的其余 8 个字符是数字,您可以使用正则表达式 "\\d+"\d 用于数字,+ 用于一位或多位数字。

Scanner sc = new Scanner(System.in);
ArrayList<String> IDS = new ArrayList();
char more = 'y';
String ID;
String regex = "\\d+";
while (more == 'y') {
    System.out.println("Pleaes enter you ID.");
    ID = sc.next();
    if (IDS.contains(ID)) {
        System.out.println("This ID is already added.");
    } else if (ID.length() == 9 && ID.charAt(0) == 'G' && ID.substring(1).matches(regex)) {
        IDS.add(ID);
        System.out.println("Added");
    } else {
        System.out.println("Invalid ID");
    }
    System.out.println("Do you want to add more? y/n");
    more = sc.next().charAt(0);
}

【讨论】:

  • 这只是检查长度和第一个字符。不检查以下8个字符是否为数字。
  • 感谢您的帮助。但它仍然有一个小问题,如果用户输入“G2445566t”,它会说添加。它不检查其他字符,
  • @MahsaChenari 我更新了你想要的答案。
【解决方案3】:

假设你将id保存为字符串,你可以先检查第一个字母,然后检查其余是否为数字。

例如

String example = "G12345678";
String firstLetter = example.substring(0, 1); //this will give you the first letter
String number = example.substring(1, 9);  //this will give you the number

要检查该数字是否为数字,您可以执行以下操作,而不是检查每个字符:

try {
      foo = Integer.parseInt(number);
} catch (NumberFormatException e) {
      //Will Throw exception!
      //do something! anything to handle the exception.
      // this is not a number
}

【讨论】:

  • 我会使用 example.charAt(0) 而不是 example.substring(0, 1)
  • 这不检查是否有超过 9 个字符。
  • @FredK 根据这个:stackoverflow.com/questions/18201191/… 最好做一个子字符串
  • @Christian true,但她似乎并没有要求这样做。无论如何,只需添加 if number.length() is 8
  • @user79303 是使用 charAt 还是子字符串取决于您要使用它做什么。您引用的参考是使用它传递给需要字符串而不是字符的方法,因此在这种情况下首选子字符串。
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 2021-08-15
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多