разделить строку без соседних символов, которая соответствует регулярному выражению в java - PullRequest
2 голосов
/ 28 мая 2020

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

Строка для разделения (например): "conditional&&operator and ampersand&Symbol."
Мое регулярное выражение для spit: "[^\\&]\\&[^\\&]"
Мое ожидание: [conditional&&operator and ampersand, Symbol]
Но результат: [conditional&&operator and *ampersan, ymbol*]

Код, который я использовал:

String s = "conditional&&operator and ampersand&Symbol.";     
String[] sarr = s.split("[^\\&]\\&[^\\&]");     
System.out.println(Arrays.toString(sarr));     

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

Ответы [ 3 ]

3 голосов
/ 28 мая 2020

Ваш вопрос очень похож на этот .

Что вам нужно, это негативный взгляд назад . В вашем случае вы можете использовать что-то вроде:

String s = "conditional&&operator and ampersand&Symbol.";
String[] sarr = s.split("(?<!&)&(?!&)");
System.out.println(Arrays.toString(sarr));
// output: [conditional&&operator and ampersand, Symbol.]
2 голосов
/ 28 мая 2020

Я полагаю, что невозможно разделить вашу строку с помощью регулярного выражения, как вы sh. Проблема в том, что [^\\&]\\&[^\\&] соответствует 3 символам -> d&S и разделяется на 3 символа, поэтому вы их удалили. Вы можете использовать Pattern и Matcher, чтобы разделить строку следующим образом:

    String s = "conditional&&operator and ampersand&Symbol.";
    final Matcher matcher = Pattern.compile("[^&]&[^&]").matcher(s);
    if (matcher.find()) {
        final int indexOfMatchStart = matcher.start();
        final String firstPart = s.substring(0, indexOfMatchStart + 1); // + 1 to include first symbol of RegEx
        final String secondPart = s.substring(indexOfMatchStart + 2); // + 2  to skip &
        System.out.println(firstPart + secondPart); // will print conditional&&operator and ampersandSymbol.
    }
1 голос
/ 28 мая 2020

Попробуйте это,

Длинный код, но Basi c logi c.

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

public class B {

    public static void main(final String[] args) {

        final String x = "conditional&&operator and ampersand&Symbol.";

        final String mydata = x;
        String delimString = "";
        final Pattern pattern = Pattern.compile("[^\\&]\\&[^\\&]");
        final Matcher m = pattern.matcher(mydata);
        while (m.find()){
            delimString = m.group(0);
        }


    final String[] result = x.split(delimString); // Split using 'd&S'
    final String[] conResult = delimString.split("&"); //Split d&S in d and s
    System.out.println(result[0]+""+conResult[0]); // append d at the end of string
    System.out.println(conResult[1]+""+result[1]); // append s at the start of string

    }
}
...