代码之家  ›  专栏  ›  技术社区  ›  Phillip

java字符串拆分后获取拆分值

  •  7
  • Phillip  · 技术社区  · 6 年前

    我有一个动态生成的字符串。

    为此,我可以使用split函数。

    现在我还想知道,在上面提到的正则表达式中,字符串实际上是基于哪个关系运算符拆分的。

    举个例子, 输入时

    String sb = "FEES > 200";
    

    List<String> ls =  sb.split(">|>=|<|<=|<>|=");
    System.out.println("Splitted Strings: "+s);
    

    Splitted strings: [FEES ,  200 ]
    

    但预期结果是:

    Splitted strings: [FEES ,  200 ]
    Splitted Relational Operator: >
    
    5 回复  |  直到 6 年前
        1
  •  15
  •   The fourth bird    6 年前

    您可以使用3个捕获组,第二个组可以交替使用:

    (.*?)(>=|<=|<>|>|<)(.*)

    Regex demo

    解释

    • (.*?)
    • (>=|<=|<>|>|<) 匹配任意一个 >= <= <> > <
    • (.*) 零次或多次匹配任何字符

    例如:

    String regex = "(.*?)(>=|<=|<>|>|<)(.*)";
    String string = "FEES >= 200";            
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(string);
    if(matcher.find()) {
        System.out.println("Splitted Relational Operator: " + matcher.group(2));
        System.out.println("Group 1: " + matcher.group(1) + " group 3: " + matcher.group(3));
    }
    

    Demo java

        2
  •  3
  •   mishadoff    6 年前

    我建议使用regex,它在你的情况下更灵活。

    String sb = "FEES > 200";
    Pattern pat = Pattern.compile("(.*?)(>=|<=|<>|=|>|<)(.*)");
    Matcher mat = pat.matcher(sb);
    if (mat.find()) {
        System.out.println("Groups: " + mat.group(1) + ", " + mat.group(3));
        System.out.println("Operator: " + mat.group(2));
    }
    
        3
  •  1
  •   drowny    6 年前

    使用 Pattern 做这个。

    String sb = "FEES > 200";
    Pattern pattern = Pattern.compile("(.*)(>|>=|<|<=|<>|=)(.*)");
    Matcher matcher = pattern.matcher(sb);
    if (matcher.find()) {
        System.out.println("Grouped params: " + matcher.group(1) + "," + matcher.group(3));
        System.out.println("Split operator: " + matcher.group(2));
    }
    

    请注意:

    • matcher.group(0)
    • matcher.group(1) --&燃气轮机;匹配的第一部分
    • matcher.group(2)
    • matcher.group(3) --&燃气轮机;第二部分匹配
        4
  •  0
  •   Amit Naik    6 年前

    你可以用 Pattern matcher

    public static int indexOf(Pattern pattern, String s) {
            Matcher matcher = pattern.matcher(s);
            return matcher.find() ? matcher.start() : -1;
        }
    
    
    public static void main(String[] args) {
        String sb = "FEES > 200";
        String[] s =  sb.split(">|>=|<|<=|<>|=");
        System.out.println("Splitted Strings: "+ s);
    
        int index = indexOf(Pattern.compile(">|>=|<|<=|<>|="), sb);
        System.out.println("del "+ sb.charAt(index));
    }
    
        5
  •  0
  •   user8393974 user8393974    6 年前

    你可以用 replaceAll() 如果要从字符串中排除数字:

    replaceAll(“\d”,”“);-这将替换空白处的所有数字

    要删除不必要的单词,你需要提供更多的信息。因为做事有不同的方法。