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

时间:2018-09-24 10:03:13

标签: java split

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

我需要根据关系运算符分割字符串。

为此,我可以使用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 个答案:

答案 0 :(得分:11)

您可以将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

答案 1 :(得分:3)

我建议使用正则表达式,这种情况在您的情况下更为灵活。

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));
}

答案 2 :(得分:1)

使用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)->匹配的第二部分

答案 3 :(得分:0)

您可以使用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));
}

答案 4 :(得分:0)

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

  

replaceAll(“ \ d”,“”); -替换空格上的所有数字

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