Инициализированная строка отличается от конкатенированной строки, но те же результаты при печати - PullRequest
0 голосов
/ 10 мая 2019

Итак, я делаю шаблон и сопоставление reg ex для пользовательского ввода и использую конкатенацию для создания строки, которая будет использоваться для Pattern.compile ().Я не могу сопоставить шаблон, но когда я печатаю результат конкатенации и помещаю его в файл Pattern.com, он совпадает с шаблоном.Я пробовал разные способы объединения, но это все равно не совпадает.

    for(int i = 0; i < 3; i++){
        Matcher elementMatcher = element.matcher(inputArr[i]);
        if(elementMatcher.matches())    inputPattern += elemString;
        else if(inputArr[i].equals("+") || inputArr[i].equals("*") || inputArr[i].equals(".") || inputArr[i].equals("(")|| inputArr[i].equals(")") || inputArr[i].equals("-") || inputArr[i].equals("/")){
            inputPattern += "\\\\";
            inputPattern += inputArr[i];
        }   
        else inputPattern += inputArr[i];
        inputPattern += "\\\\s*";           
    }

    if(inputPattern.equals("[a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*"))    
    System.out.println(inputPattern); //prints [a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*
    pattern1 = Pattern.compile(inputPattern);
    matcher1 = pattern1.matcher(value[j]);
    if(matcher1.matches())  {
            result = value[j];
        System.out.println("YO");

    }

Странно, это работает, когда

pattern1 = Pattern.compile("[a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*");

, но печать inputPattern выдает [a-zA-Z]+\\s*\\+\\s*[a-zA-Z]+\\s*, а

pattern1 = Pattern.compile(inputPattern); 

дает разные результаты

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Я думаю, что ваша проблема заключается в том, как получить соответствующее количество символов \ в строке шаблона.Чтобы получить один символ \ в буквальную строку, вам нужно ввести два: «\\» даст вам строку с одним символом.Эта строка будет напечатана как \.Следовательно, если у вас есть строка, которая печатается как \\, возможно, она была создана с использованием четырех символов \ в буквальной строке, поскольку "\\\\" будет печататься как \\.

Обычно лучше всего попробоватьмаксимально упростить, разобраться и исправить такие проблемы!

0 голосов
/ 10 мая 2019

Java имеет escape-последовательности в строковых литералах.Если строка содержит \, это означает, что следующий символ будет интерпретирован особым образом.

Чтобы добавить \ в строку, вам необходимо ее экранировать "\\".

Вот пример кода:

String s = "\\";

System.out.println(s); // print single slash
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...