Basta usar o método apropriado: String#split()
.
String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556
Observe que isso exige uma expressão regular ; lembre-se de escapar de caracteres especiais, se necessário.
existem 12 caracteres com significados especiais: a barra invertida \
, o ^
sinal de intercalação , o sinal de dólar $
, o ponto ou o ponto .
, o símbolo vertical da barra ou tubo |
, o ponto de interrogação ?
, o asterisco ou estrela *
, o sinal de mais +
, o parêntese de abertura (
, o parêntese de fechamento )
, e o colchete de abertura [
, o colchete de abertura {
. Esses caracteres especiais geralmente são chamados de "metacaracteres".
Portanto, se você deseja dividir, por exemplo, ponto / ponto .
que significa " qualquer caractere " na expressão regular, use a barra invertida\
para escapar do caractere especial individual como tal split("\\.")
ou use a classe de caractere[]
para representar o (s) caractere (s) literal (s) dessa forma split("[.]")
ou use Pattern#quote()
para escapar da corda inteira assim split(Pattern.quote("."))
.
String[] parts = string.split(Pattern.quote(".")); // Split on period.
Para testar antecipadamente se a string contém certos caracteres, use String#contains()
.
if (string.contains("-")) {
// Split it.
} else {
throw new IllegalArgumentException("String " + string + " does not contain -");
}
Observe que isso não requer uma expressão regular. Para isso, use em String#matches()
vez disso.
Se você deseja manter o caractere dividido nas partes resultantes, use uma pesquisa positiva . Caso você queira que o caractere de divisão termine no lado esquerdo, use um look positivo por trás, prefixando o ?<=
grupo no padrão.
String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556
Caso você deseje que o caractere dividido termine no lado direito, use um visual positivo, prefixando o ?=
grupo no padrão.
String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556
Se você deseja limitar o número de partes resultantes, pode fornecer o número desejado como o segundo argumento do split()
método.
String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42
reugalr expression
, retorna um array de elementos com toda a string.Uma alternativa ao processamento direto da string seria usar uma expressão regular com grupos de captura. Isso tem a vantagem de facilitar a implicação de restrições mais sofisticadas na entrada. Por exemplo, o seguinte divide a sequência em duas partes e garante que ambas consistam apenas em dígitos:
Como o padrão é corrigido nesta instância, ele pode ser compilado com antecedência e armazenado como um membro estático (inicializado no tempo de carregamento da classe no exemplo). A expressão regular é:
Os parênteses indicam os grupos de captura; a sequência que corresponde a essa parte da regexp pode ser acessada pelo método Match.group (), conforme mostrado. O \ d corresponde a um dígito decimal único e o + significa "corresponde a uma ou mais da expressão anterior). O - não tem significado especial; portanto, apenas corresponde ao caractere na entrada. Observe que você precisa escapar duas vezes as barras invertidas ao escrever isso como uma string Java. Alguns outros exemplos:
fonte
m.group(1)
a segunda partem.group(2)
, poism.group(0)
na verdade retorna o padrão de correspondência completa. Eu acho que também me lembro quegroup(0)
costumava ser a primeira partida em vez do padrão completo, talvez isso tenha sido alterado em uma atualização recente da versão java.Isso dividirá sua string em 2 partes. O primeiro elemento da matriz será a parte que contém o material antes da
-
, e o segundo elemento da matriz conterá a parte da sua sequência após a-
.Se o comprimento da matriz não é 2, então a cadeia não estava no formato:
string-string
.Confira o
split()
método naString
classe.fonte
deve fazer o que quiser. A classe String possui muitos métodos para operar com string.
fonte
fonte
StringTokenizer
é uma classe herdada que é mantida por motivos de compatibilidade, embora seu uso seja desencorajado em novo código . É recomendável que qualquer pessoa que procure essa funcionalidade use osplit
métodoString
ou ojava.util.regex
pacote".Com o Java 8:
fonte
.map(String::trim)
após osplit
Os requisitos deixaram espaço para interpretação. Eu recomendo escrever um método,
que encapsula essa função. Obviamente, você pode usar String.split (..) conforme mencionado nas outras respostas para a implementação.
Você deve escrever alguns testes de unidade para cadeias de caracteres de entrada e os resultados e comportamento desejados.
Bons candidatos a teste devem incluir:
Com a definição dos resultados do teste de acordo, você pode especificar o comportamento.
Por exemplo, se
"-333"
deve retornar[,333]
ou se é um erro. Pode"333-333-33"
ser separado[333,333-33] or [333-333,33]
ou é um erro? E assim por diante.fonte
Você pode tentar assim também
fonte
Assumindo que
A maneira mais fácil é usar o StringUtils # split (java.lang.String, char) . Isso é mais conveniente do que o fornecido por Java imediatamente, se você não precisar de expressões regulares. Como o manual diz, funciona assim:
Eu recomendaria o uso do commong-lang, pois geralmente contém muitas coisas úteis. No entanto, se você não precisar dele para nada além de fazer uma divisão, implementar-se ou escapar do regex é uma opção melhor.
fonte
Use o método de divisão org.apache.commons.lang.StringUtils, que pode dividir cadeias com base no caractere ou na cadeia que você deseja dividir.
Assinatura do método:
No seu caso, você deseja dividir uma string quando houver um "-".
Você pode simplesmente fazer o seguinte:
Resultado:
Suponha que, se
-
não existir na sua sequência, ela retornará a sequência especificada e você não receberá nenhuma exceção.fonte
Resumindo: existem pelo menos cinco maneiras de dividir uma sequência em Java:
String.split ():
Pattern.compile (regexp) .splitAsStream (entrada):
StringTokenizer (classe herdada):
Divisor do Google Guava:
Apache Commons StringUtils:
Assim, você pode escolher a melhor opção para você, dependendo do que você precisa, por exemplo, tipo de retorno (matriz, lista ou iterável).
Aqui está uma grande visão geral desses métodos e os exemplos mais comuns (como dividir por ponto, barra, ponto de interrogação etc.)
fonte
A maneira mais rápida, que também consome menos recursos, pode ser:
fonte
string1 = s.substring(0, s.indexOf("-"));
string2 = s.substring(s.indexOf("-") + 1);
disso. Você receberáStringIndexOutOfBoundsException
automaticamente se não houver "-".String Split com vários caracteres usando Regex
Resultado:
Mas não espere a mesma saída em todas as versões do JDK. Eu vi um bug que existe em algumas versões do JDK em que a primeira cadeia nula foi ignorada. Esse bug não está presente na versão mais recente do JDK, mas existe em algumas versões entre as versões finais do JDK 1.7 e 1.8.
fonte
Para casos de uso simples,
String.split()
deve fazer o trabalho. Se você usa goiaba, também há uma classe Splitter que permite encadear diferentes operações de string e suporta o CharMatcher :fonte
fonte
Você pode dividir uma seqüência de caracteres por uma quebra de linha usando a seguinte instrução:
Você pode dividir uma string por um hífen / caractere usando a seguinte instrução:
fonte
fonte
Você pode usar Split ():
Senão, você pode usar o StringTokenizer:
fonte
Existem apenas dois métodos que você realmente precisa considerar.
Use String.split para um delimitador de um caractere ou você não se importa com o desempenho
Se o desempenho não for um problema ou se o delimitador for um único caractere que não seja um caractere especial de expressão regular (ou seja, não um
.$|()[{^?*+\
), você poderá usá-loString.split
.O método split possui uma otimização para evitar o uso de uma expressão regular se o delimitador for um único caractere e não estiver na lista acima. Caso contrário, ele deve compilar uma expressão regular, e isso não é o ideal.
Use Pattern.split e pré-compile o padrão se estiver usando um delimitador complexo e se preocupa com o desempenho.
Se o desempenho for um problema e o seu delimitador não for um dos itens acima, você deverá pré-compilar um padrão de expressão regular que poderá reutilizar.
Esta última opção ainda cria um novo
Matcher
objeto. Você também pode armazenar em cache esse objeto e redefini-lo para cada entrada para obter o máximo desempenho, mas isso é um pouco mais complicado e não é seguro para threads.fonte
Uma maneira de fazer isso é percorrer a String em um loop for-each e usar o caractere de divisão necessário.
Resultado:
fonte
Por favor, não use a classe StringTokenizer , pois é uma classe herdada que é mantida por motivos de compatibilidade e seu uso é desencorajado no novo código. E podemos fazer uso do método split, conforme sugerido por outros também.
E como esperado, ele será impresso:
Nesta resposta, também quero apontar uma mudança que ocorreu no
split
método em Java 8 . O método String # split () faz usoPattern.split
e agora removerá cadeias vazias no início da matriz de resultados. Observe esta mudança na documentação para Java 8:Significa para o seguinte exemplo:
teremos três strings:
[0, 0, 4]
e não quatro, como era o caso do Java 7 e anterior. Verifique também essa pergunta semelhante .fonte
Aqui estão duas maneiras pelas quais dois conseguem isso.
MANEIRA 1: Como você precisa dividir dois números por um caractere especial, pode usar regex
MANEIRA 2: Usando o método de divisão de cadeia
fonte
Você pode simplesmente usar o StringTokenizer para dividir uma sequência em duas ou mais partes, se houver algum tipo de delimitador:
fonte
Confira o
split()
método naString
classe em javadoc.Aqui estão muitos exemplos de string dividida, mas eu pouco código otimizado.
fonte
-
por|
e veja o que acontece :) #fonte
Eu só queria escrever um algoritmo em vez de usar as funções internas do Java:
fonte
Você pode usar o método
split
:fonte
Para dividir uma sequência, use String.split (regex). Revise os seguintes exemplos:
Resultado
Nota:
Essa divisão (regex) recebe uma regex como argumento. Lembre-se de escapar dos caracteres especiais regex, como ponto / ponto.
fonte
fonte
Para dividir uma sequência, use
String.split(regex)
:Resultado:
fonte