Como dividir corda, mas manter delimitadores em java?

Tjeu Foolen:

Eu estou tentando recriar as mensagens maneira discórdia Analisa com dentro dele é emoji.

Por exemplo, eu quero a mensagem Hello, :smile::hearth: world!a divisão na seguinte matriz:

["Hello, ", ":smile:", ":hearth:", " world!"]

Eu já tentei dividir a matriz com o seguinte código:

Arrays.toString(message.split("(:[A-Za-z]+:)"))

No entanto, o método split remove os delimitadores encontrados. Então os olhares resultado final como este:

["Hello", , , " world!"]
Pushpesh Kumar Rajwanshi:

A partir de sua cadeia de entrada e resultados esperados, posso inferir que você quer dividir sua seqüência, basicamente, de três regras.

  • Dividir a partir do ponto que é precedido e seguido por um cólon
  • Dividir a partir do ponto que está precedido por um espaço e seguido por um cólon
  • Dividir a partir do ponto que está precedido por um cólon e seguido por um espaço

Daí você pode usar esse regex usando alternâncias para todos os três casos acima mencionados.

(?<=:)(?=:)|(?<= )(?=:)|(?<=:)(?= )

regex Demonstração

código Java,

String s = "Hello, :smile::hearth: world!";
System.out.println(Arrays.toString(s.split("(?<=:)(?=:)|(?<= )(?=:)|(?<=:)(?= )")));

Prints como o seu resultado esperado,

[Hello, , :smile:, :hearth:,  world!]

Além disso, como uma alternativa se você pode usar combinando o texto em vez de dividir, a regex seria muito mais simples de usar e que seria isso,

:[^:]+:|\S+

Regex demonstração usando jogo

código Java,

String s = "Hello, :smile::hearth: world!";
Pattern p = Pattern.compile(":[^:]+:|\\S+");
Matcher m = p.matcher(s);
while(m.find()) {
    System.out.println(m.group());
}

Prints,

Hello,
:smile:
:hearth:
world!

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=172579&siteId=1
Recomendado
Clasificación