Токенизация входной строки без разделителя - PullRequest
1 голос
/ 23 апреля 2020

У меня есть строка вроде этого (Customer.Activity == "Автокредит"). Я использую код ниже, чтобы разделить строку с помощью StringTokenizer в java

import java.util.ArrayList;
import java.util.StringTokenizer;

public class StringTokenizerClass {

    public ArrayList<String> stringTokenizer(String str) {


        StringTokenizer Tokenizer = new StringTokenizer(str);

        ArrayList<String> tokenList = new ArrayList<String>();

        while (Tokenizer.hasMoreTokens()) {
            tokenList.add(Tokenizer.nextToken());
        }

        return (tokenList);
    }

}

public class StringTokenizerMain {

    public static void main(String[] args) {

        String input = "(Customer.Activity == \"Car Loan\")";

        StringTokenizerClass st = new StringTokenizerClass();

        for (int i = 0; i < st.stringTokenizer(input).size(); i++) {
            System.out.println(st.stringTokenizer(input).get(i));
        }

    }

}

И я получаю вывод, как ниже

("Customer.Activity"
==
"Car
Loan")

Но я пытаюсь добиться результата, как показано ниже

enter image description here

Можете ли вы предложить мне, как я могу достичь выше выход

Ответы [ 3 ]

2 голосов
/ 23 апреля 2020

Вам нужно добавить действительный разделитель,

StringTokenizer Tokenizer = new StringTokenizer(str,"\\\"", true);

Пропуск, returnDelims=true, как вам нужно " в результате.

С обновленным вопросом:

Вы можете использовать "=(\"", но для == нельзя использовать любые разделители,

(
Customer.Activity 
=
=

"
Car Loan
"
)

Примечание от java документы ,

StringTokenizer - это устаревший класс, который сохраняется по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Всем, кто ищет эту функцию, рекомендуется вместо этого использовать метод split String или пакет java .util.regex.

1 голос
/ 23 апреля 2020

Если вам подходит решение с использованием Java regex API , приведенное ниже того, которое точно соответствует вашим требованиям:

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        List<String> tokenList = new ArrayList<String>();
        String str = "(\"Customer.Activity\" == \"Car Loan\")";
        Pattern pattern = Pattern.compile("[(\")]|\\w+.\\w+|==");
        Matcher matcher = pattern.matcher(str);
        while (matcher.find()) {
            tokenList.add(matcher.group());
        }

        for (String token : tokenList) {
            System.out.println(token);
        }
    }
}

Вывод:

(
"
Customer.Activity
"
==
"
Car Loan
"
)
1 голос
/ 23 апреля 2020

Я думаю, вам нужно:

StringTokenizer st = new StringTokenizer(input, "\"");
while (st.hasMoreTokens()) {
  System.out.println(st.nextToken());
}
...