【问题标题】:How to put Java Regex matches to Resultant String?如何将 Java 正则表达式匹配到结果字符串?
【发布时间】:2019-11-20 09:30:49
【问题描述】:

How to tokenize an String like in lexer in java?

请参考上述问题。我从未使用过 java regex 。如何将所有子字符串放入新字符串中,匹配字符(符号如'('')''。'''“)由单个空格分隔。例如在正则表达式之前

 String c= "List<String> uncleanList = Arrays.asList(input1.split("x"));" ;

我想要这样的结果字符串。

String r= " List < String > uncleanList = Arrays . asList ( input1 . split ( " x " ) ) ; "

【问题讨论】:

    标签: java regex string algorithm


    【解决方案1】:

    参考您链接到的代码,matcher.group() 将为您提供一个令牌。简单地使用 StringBuilder 附加这个标记和一个空格来获取一个新的字符串,其中标记是空格分隔的。

    String c = "List<String> uncleanList = Arrays.asList(input1.split(\"x\"));" ;
    Pattern pattern = Pattern.compile("\\w+|[+-]?[0-9\\._Ee]+|\\S");
    Matcher matcher = pattern.matcher(c);
    
    StringBuilder sb = new StringBuilder();
    while (matcher.find()) {
        String token = matcher.group();
        sb.append(token).append(" ");
    }
    String r = sb.toString();
    System.out.println(r);
    
    

    【讨论】:

    • 代码工作正常......但我的后续问题是:如果我需要忽略 " " 或 ' ' 或 [] 之间的符号。所以我该怎么做?请根据我的问题回答+参考一些有用的教程。
    • 这基本上是String r = pattern.matcher(c).replaceAll("$0 "); 的手动版本,您甚至可以临时替换,直接在输入字符串上调用replaceAll,例如System.out.println(c.replaceAll("\\w+|[+-]?[0-9\\._Ee]+|\\S", "$0 "));
    【解决方案2】:
        String c = "List<String> uncleanList = Arrays.asList(input1.split('x'));";
        Matcher matcher = Pattern.compile("\\<|\\>|\\\"|\\.|\\(|\\)").matcher(c);
    
        while(matcher.find()){
            String symbol = matcher.group();
            c = c.replace(symbol," " + symbol + " ");
        }
    

    其实如果你仔细看你会发现你只需要分开字母符号和空格((?![a-zA-Z]|\ )。)

    【讨论】:

    • 输入字符串包含“x”而不是“x”。
    • 你检查过它是如何工作的吗?它工作正常,我写了 ' 因为我不想写 \"
    猜你喜欢
    • 2012-11-29
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多