在Java中使用字符串分割后获取分割值

10

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

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

为此,我可以使用拆分函数。

现在我还想知道,在上述正则表达式中,实际上是基于哪个关系运算符分割了该字符串。

例如,输入:

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: >

你可以再次分割String,这一次通过空格进行分割。然后迭代并查找运算符,可以使用一个包含所有可能的运算符字符串的switch语句。 - deHaar
3
您可以使用 Pattern.matches() 和正则表达式来捕获分隔符并将其放入分组中。 - mishadoff
5个回答

15

你可以在第二个捕获组中使用替代(alternation)并设置三个分组:

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

正则表达式演示

解释

  • (.*?) 非贪婪地匹配零或更多的任意字符
  • (>=|<=|<>|>|<) 匹配 >=<=<>><
  • (.*) 匹配零或更多的任意字符

例如:

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

演示Java


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

1
请使用此正则表达式:(.*?)(>=|<=|<>|>|<)(.*) - Sumesh TG
@SumeshTG 你说得对,我们需要从最长的开始更新。 - mishadoff

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

0
你可以使用“模式匹配器”来匹配分隔符。下面是一个示例 -
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));
}

0

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

replaceAll("\d", ""); - 这将替换所有数字为空格

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接