Получение значения split после разделения строки java - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть строка, которая генерируется динамически.

Мне нужно разделить строку на основе реляционного оператора.

Для этого я могу использовать функцию разделения.

Теперь я также хотел бы знать, что изупомянутое выше регулярное выражение, основанное на том факте, что Relational Operator фактически разделил строку.

Пример: на входе

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 голосов
/ 24 сентября 2018

Вы можете использовать 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));
}

Демонстрация Java

0 голосов
/ 24 сентября 2018

Используйте 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 голосов
/ 24 сентября 2018

Я предлагаю использовать регулярное выражение, которое в вашем случае более гибкое.

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));
}
0 голосов
/ 24 сентября 2018

Вы можете использовать replaceAll () , если хотите исключить число из вашей строки:

replaceAll ("\ d", "");- это заменит все цифры на пробелах

Для удаления ненужных слов вам нужно дать больше информации.Потому что есть разные способы ведения дел.

0 голосов
/ 24 сентября 2018

Вы можете использовать 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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...