【问题标题】:Matching the pattern of a string in java在java中匹配字符串的模式
【发布时间】:2012-06-24 21:33:03
【问题描述】:

我一直在试图弄清楚如何将我的输入字符串的模式与这种字符串匹配:

“xyz 123456789”

一般来说,每次我有一个前 3 个字符(可以是大写或小写)且后 9 个是数字(任意组合)的输入时,都应该接受输入字符串。

所以如果我有 i/p string = "Abc 234646593" 它应该是一个匹配项(允许一个或两个空格)。如果“Abc”和“234646593”应该存储在单独的字符串中,那就太好了。

我看过很多正则表达式,但并不完全理解。

【问题讨论】:

  • Java正则表达式的介绍可以在这里找到:docs.oracle.com/javase/tutorial/essential/regex
  • 您无法通过随机查看示例来学习正则表达式。花时间深入学习一种语言,然后将其应用于其他语言的类似语法。

标签: java regex


【解决方案1】:

这是一个有效的 Java 解决方案:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {
  public static void main(String[] args) {
    String input = "Abc 234646593";

    // you could use \\s+ rather than \\s{1,2} if you only care that
    // at least one whitespace char occurs
    Pattern p = Pattern.compile("([a-zA-Z]{3})\\s{1,2}([0-9]{9})");
    Matcher m = p.matcher(input);
    String firstPart = null;
    String secondPart = null;
    if (m.matches()) {
      firstPart = m.group(1);  // grab first remembered match ([a-zA-Z]{3})
      secondPart = m.group(2); // grab second remembered match ([0-9]{9})
      System.out.println("First part: " + firstPart);
      System.out.println("Second part: " + secondPart);
    }
  }
}

打印出来:

第一部分:ABC 第二部分:234646593

【讨论】:

  • 作为一个小提示,使用这样的代码,通常最好 /not/ 来初始化 firstPart 和 secondPart。这样,如果您稍后在代码中意外引用它而没有给它一个正确的值,则该错误将在编译时而不是运行时被捕获。
  • 我选择了\\s{1,2},因为问题是“允许一两个空格”,所以我很严格地向他展示如何做到这一点。通常我会使用\\s+,如果我只关心至少有一个空格字符,然后是任何数字。
  • @midpeter444:我明白了,我错了。现在我问自己为什么我没有看到它,但这对其他人来说当然没有兴趣,所以我删除了我的评论。对不起。
猜你喜欢
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多