Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式将连续的字和数字返回到arraylist中_Java_Regex - Fatal编程技术网

Java正则表达式将连续的字和数字返回到arraylist中

Java正则表达式将连续的字和数字返回到arraylist中,java,regex,Java,Regex,我正在尝试编写一个Java正则表达式例程,该例程将返回具有以下要求的arraylist” 删除特殊字符 将字符串添加到包含连续字母字符和连续数字字符的arraylist中 一个空格或一系列空格是分隔符 以下是输入: Az ma9n,66一个pk0局域网,一个c55an*()al:PAN3AFFMA 以下是ArrayList中应该包含的内容的预期输出: Az,ma,9,n,66,a,pk,0,lan,a,c,55,an,al,Pan,3,afffma 这是我所拥有的,但它还没有接近: Stri

我正在尝试编写一个Java正则表达式例程,该例程将返回具有以下要求的arraylist”

  • 删除特殊字符
  • 将字符串添加到包含连续字母字符和连续数字字符的arraylist中
  • 一个空格或一系列空格是分隔符
  • 以下是输入:

    Az ma9n,66一个pk0局域网,一个c55an*()al:PAN3AFFMA
    
    以下是ArrayList中应该包含的内容的预期输出:

    Az,ma,9,n,66,a,pk,0,lan,a,c,55,an,al,Pan,3,afffma
    
    这是我所拥有的,但它还没有接近:

    String test = "Az ma9n,  66  a pk0 lan, a c55an*()al: Pan3afffma";
    List<String> list = new ArrayList<String>();
    test = test.replaceAll("[^a-zA-Z0-9|\\s]", "");
    Matcher m = Pattern.compile("[a-z+A-Z+0-9+]").matcher(test);
    
    while(m.find()) {
        list.add(m.group());
    }
    
    System.out.println(list.toString());
    
    String test=“Az ma9n,66一个pk0局域网,一个c55an*()al:PAN3AFFMA”;
    列表=新的ArrayList();
    test=test.replaceAll(“[^a-zA-Z0-9 |\\s]”,即“);
    Matcher m=Pattern.compile(“[a-z+a-z+0-9+]”)。Matcher(test);
    while(m.find()){
    list.add(m.group());
    }
    System.out.println(list.toString());
    
    按以下步骤操作:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Main {
        public static void main(String[] args) {
            String test = "Az ma9n,  66  a pk0 lan, a c55an*()al: Pan3afffma";
            List<String> list = new ArrayList<String>();
    
            // Pattern to match either sequence of digits or that of letters
            Pattern pattern = Pattern.compile("[0-9]+|[A-Za-z]+");
    
            Matcher matcher = pattern.matcher(test);
            while (matcher.find()) {
                list.add(matcher.group());
            }
    
            // Display list
            System.out.println(list);
        }
    }
    

    如果您使用的是Java 9或更高版本,则可以使用
    Matcher\results()
    以简洁的方式编写它:

    String test=“Az ma9n,66一个pk0局域网,一个c55an*()al:PAN3AFFMA”;
    List List=Pattern.compile(“\\p{Digit}+\\\p{Alpha}+”)
    .matcher(测试)
    .结果()
    .map(匹配结果::组)
    .collect(Collectors.toList());
    
    使用
    Matcher m=Pattern.compile(\\p{Digit}+\\\p{Alpha}+).Matcher(test);
    或者如果需要支持Unicode,
    Matcher m=Pattern.compile(\\p{N}+\\\p{L}+)。Matcher(test)
    Sweet!我猜括号可以分隔组吗?非常欢迎。方括号用于字符或范围分组任何一个字符都必须匹配的字符。我强烈建议您查看教程。
    [Az, ma, 9, n, 66, a, pk, 0, lan, a, c, 55, an, al, Pan, 3, afffma]
    
    String test = "Az ma9n,  66  a pk0 lan, a c55an*()al: Pan3afffma";
    List<String> list= Pattern.compile("\\p{Digit}+|\\p{Alpha}+")
                              .matcher(test)
                              .results()
                              .map(MatchResult::group)
                              .collect(Collectors.toList());