有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正则表达式拆分会产生一个额外的空间,使用\\s,但不会删除它

我试图用正则表达式解析一个字符串,这个字符串有开头偏旁句和结尾偏旁句,它们之间列出了英文字母,用逗号分隔。每个逗号后面都有一个空格。像这样

import java.util.Arrays;
import java.util.Set;
import java.util.HashSet;
import java.io.*;

public class StringLetters {

    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String[] temp = br.readLine().split("\\s*(\\{|,|\\}|\\s)\\s*");

            for (int i = 0; i < temp.length; i++) {
                System.out.println("temp[" + i + "] ===>" + temp[i]);
            }

            Set<String> set = new HashSet<>();
            for (String a : temp) {
                set.add(a);
            }

            System.out.println(set.size());
        } catch (IOException ioe) {

        }
    }
}

当我把{a,b,c}作为输入传递时

$ java StringLetters

  {a, b, c}

 temp[0] ===>
 temp[1] ===>a
 temp[2] ===>b
 temp[3] ===>c
 4

其他输入可以是{}、{s,h,a,n,o,n,o}、{h,e,a,l,h,t}。。。等等

所以当我做

   $ java StringLetters
    {}
    0

这是正确的,对于空字符串,我应该得到这个0

temp数组中第0位的空字符串不是我想要的,我在“(\{124;,\\}124;\ s)”中使用了\s,但这对我没有帮助


共 (2) 个答案

  1. # 1 楼答案

    在不调用拆分的情况下,上述任务可以按如下方式完成:-

    import java.util.Set;
    import java.util.HashSet;
    import java.io.*;
    
    public class StringLetters {
      
        public static void main(String[] args){
          
            try{
               
              BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
              String str = br.readLine();
              Set<Character> set = new HashSet<>();
              for(int i = 0; i < str.length(); i++){
                
                  if(str.charAt(i) != '{' && str.charAt(i) != '}' && str.charAt(i) != ' ' && str.charAt(i) != ','){
                     
                     set.add(str.charAt(i));
    
                  }
              }
    
              System.out.println(set.size());
            
            }catch(IOException ioe){
              ioe.printStackTrace();
            }
        }
    }
    

    这项任务本身很简单,但我对正则表达式很感兴趣,我想知道如何使用正则表达式来完成这项任务

  2. # 2 楼答案

    正则表达式将{视为第一个分隔符,给您一个空字符串。简单的方法是在创建Set时过滤数组:

            Set<String> set = new HashSet<>(); 
            for(String a : temp){
                if (a != null && !a.isEmpty())
                   set.add(a);
            }