Sólo tiene que utilizar el método apropiado: String#split()
.
String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556
Tenga en cuenta que esto toma una expresión regular , así que recuerde escapar de caracteres especiales si es necesario.
Hay 12 caracteres con significados especiales: la barra diagonal inversa \
, el ^
símbolo de intercalación , el signo de dólar $
, el punto o punto .
, el símbolo de barra o tubo vertical |
, el signo de interrogación ?
, el asterisco o la estrella *
, el signo más +
, el paréntesis de apertura (
, el paréntesis de cierre )
, y el corchete de apertura [
, la llave de apertura {
, estos caracteres especiales a menudo se denominan "metacaracteres".
Por lo tanto, si desea dividir, por ejemplo, punto / punto, .
que significa " cualquier carácter " en la expresión regular, use una barra diagonal inversa\
para escapar del carácter especial individual como tal split("\\.")
, o use la clase de caracteres[]
para representar caracteres literales como ese split("[.]")
, o use Pattern#quote()
para escapar de toda la cadena así split(Pattern.quote("."))
.
String[] parts = string.split(Pattern.quote(".")); // Split on period.
Para probar de antemano si la cadena contiene ciertos caracteres, simplemente use String#contains()
.
if (string.contains("-")) {
// Split it.
} else {
throw new IllegalArgumentException("String " + string + " does not contain -");
}
Tenga en cuenta que esto no toma una expresión regular. Para eso, use String#matches()
en su lugar.
Si desea conservar el carácter dividido en las partes resultantes, utilice una apariencia positiva . En caso de que desee que el carácter dividido termine en el lado izquierdo, use una mirada hacia atrás positiva al prefijar el ?<=
grupo en el patrón.
String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556
En caso de que desee que el carácter dividido termine en el lado derecho, use una búsqueda positiva al prefijar el ?=
grupo en el patrón.
String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556
Si desea limitar el número de partes resultantes, puede proporcionar el número deseado como segundo argumento del 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
, devuelve una matriz de elementos con una cadena completa.Una alternativa para procesar la cadena directamente sería usar una expresión regular con grupos de captura. Esto tiene la ventaja de que hace que sea sencillo implicar restricciones más sofisticadas en la entrada. Por ejemplo, lo siguiente divide la cadena en dos partes y garantiza que ambas consistan solo en dígitos:
Como el patrón se arregla en este caso, puede compilarse por adelantado y almacenarse como un miembro estático (inicializado en el momento de carga de la clase en el ejemplo). La expresión regular es:
Los paréntesis denotan los grupos de captura; Se puede acceder a la cadena que coincide con esa parte de la expresión regular mediante el método Match.group (), como se muestra. \ D coincide con un solo dígito decimal, y el + significa "coincide con una o más de la expresión anterior). al escribir esto como una cadena de Java. Algunos otros ejemplos:
fuente
m.group(1)
, la segunda partem.group(2)
, ya que enm.group(0)
realidad devuelve el patrón de coincidencia completo. Creo que también recuerdo quegroup(0)
solía ser la primera coincidencia en lugar del patrón completo, tal vez esto cambió en una actualización reciente de la versión de Java.Esto dividirá su cadena en 2 partes. El primer elemento en la matriz será la parte que contiene las cosas antes de
-
, y el segundo elemento en la matriz contendrá la parte de su cadena después de-
.Si la longitud de la matriz no es 2, entonces la cadena no estaba en el formato:
string-string
.Echa un vistazo al
split()
método en laString
clase.fuente
deberías hacer lo que quieras. La clase de cadena tiene muchos métodos para operar con cadena.
fuente
fuente
StringTokenizer
es una clase heredada que se retiene por razones de compatibilidad, aunque se desaconseja su uso en el nuevo código . Se recomienda que cualquiera que busque esta funcionalidad utilice elsplit
métodoString
o eljava.util.regex
paquete".Con Java 8:
fuente
.map(String::trim)
después desplit
Los requisitos dejaron espacio para la interpretación. Recomiendo escribir un método,
que encapsulan esta función. Por supuesto, puede usar String.split (..) como se menciona en las otras respuestas para la implementación.
Debe escribir algunas pruebas unitarias para las cadenas de entrada y los resultados y el comportamiento deseados.
Los buenos candidatos para la prueba deben incluir:
Con la definición de los resultados de la prueba, puede especificar el comportamiento.
Por ejemplo, si
"-333"
debería regresar[,333]
o si es un error. ¿Se"333-333-33"
puede separar[333,333-33] or [333-333,33]
o es un error? Y así.fuente
Puedes probar así también
fuente
Asumiendo que
La forma más fácil es usar StringUtils # split (java.lang.String, char) . Eso es más conveniente que el proporcionado por Java fuera de la caja si no necesita expresiones regulares. Como dice su manual, funciona así:
Recomendaría usar commong-lang, ya que generalmente contiene muchas cosas que se pueden usar. Sin embargo, si no lo necesita para otra cosa que no sea una división, implementarse o escapar de la expresión regular es una mejor opción.
fuente
Use el método de división org.apache.commons.lang.StringUtils que puede dividir cadenas en función del carácter o cadena que desea dividir.
Firma del método:
En su caso, desea dividir una cadena cuando hay un "-".
Simplemente puede hacer lo siguiente:
Salida:
Suponga que si
-
no existe en su cadena, devuelve la cadena dada y no obtendrá ninguna excepción.fuente
Para resumir: hay al menos cinco formas de dividir una cadena en Java:
String.split ():
Pattern.compile (regexp) .splitAsStream (entrada):
StringTokenizer (clase heredada):
Divisor de guayaba de Google:
Apache Commons StringUtils:
Por lo tanto, puede elegir la mejor opción para usted dependiendo de lo que necesite, por ejemplo, tipo de retorno (matriz, lista o iterable).
Aquí hay una gran descripción de estos métodos y los ejemplos más comunes (cómo dividir por punto, barra, signo de interrogación, etc.)
fuente
La forma más rápida, que también consume la menor cantidad de recursos podría ser:
fuente
string1 = s.substring(0, s.indexOf("-"));
string2 = s.substring(s.indexOf("-") + 1);
de eso. Obtendrá elStringIndexOutOfBoundsException
automáticamente si no hubo "-".División de cadenas con múltiples caracteres usando Regex
Salida:
Pero no espere el mismo resultado en todas las versiones de JDK. He visto un error que existe en algunas versiones de JDK donde la primera cadena nula ha sido ignorada. Este error no está presente en la última versión de JDK, pero existe en algunas versiones entre las versiones finales JDK 1.7 y 1.8 versiones anteriores.
fuente
Para casos de uso simple
String.split()
debe hacer el trabajo. Si usa guayaba, también hay una clase Splitter que permite el encadenamiento de diferentes operaciones de cadena y admite CharMatcher :fuente
fuente
Puede dividir una cadena por un salto de línea utilizando la siguiente instrucción:
Puede dividir una cadena por un guión / carácter utilizando la siguiente instrucción:
fuente
fuente
Puedes usar Split ():
De lo contrario, puede usar StringTokenizer:
fuente
Solo hay dos métodos que realmente debe considerar.
Use String.split para un delimitador de un carácter o no le importa el rendimiento
Si el rendimiento no es un problema, o si el delimitador es un solo carácter que no es un carácter especial de expresión regular (es decir, no es uno de
.$|()[{^?*+\
), puede usarloString.split
.El método de división tiene una optimización para evitar el uso de una expresión regular si el delímetro es un solo carácter y no está en la lista anterior. De lo contrario, tiene que compilar una expresión regular, y esto no es lo ideal.
Use Pattern.split y precompile el patrón si usa un delimitador complejo y le preocupa el rendimiento.
Si el rendimiento es un problema y su delimitador no es uno de los anteriores, debe precompilar un patrón de expresión regular que luego puede reutilizar.
Esta última opción todavía crea un nuevo
Matcher
objeto. También puede almacenar en caché este objeto y restablecerlo para cada entrada para obtener el máximo rendimiento, pero eso es algo más complicado y no es seguro para subprocesos.fuente
Una forma de hacerlo es ejecutar la cadena en un bucle for-each y usar el carácter de división requerido.
Salida:
fuente
No utilice la clase StringTokenizer , ya que es una clase heredada que se conserva por razones de compatibilidad, y su uso no se recomienda en el nuevo código. Y también podemos utilizar el método de división según lo sugerido por otros.
Y como se esperaba imprimirá:
En esta respuesta, también quiero señalar un cambio que ha tenido lugar para el
split
método en Java 8 . El método String # split () utilizaPattern.split
, y ahora eliminará cadenas vacías al comienzo de la matriz de resultados. Observe este cambio en la documentación para Java 8:Significa para el siguiente ejemplo:
obtendremos tres cadenas:
[0, 0, 4]
y no cuatro como era el caso en Java 7 y anteriores. También revise esta pregunta similar .fuente
Aquí hay dos maneras en que dos lo logran.
CAMINO 1: como debe dividir dos números por un carácter especial, puede usar expresiones regulares
CAMINO 2: Usando el método de división de cadenas
fuente
Simplemente puede usar StringTokenizer para dividir una cadena en dos o más partes, ya sea que haya algún tipo de delimitador:
fuente
Echa un vistazo al
split()
método en laString
clase sobre javadoc.Aquí hay muchos ejemplos para una cadena dividida pero un pequeño código optimizado.
fuente
-
con|
y vea lo que sucede :)fuente
Solo quería escribir un algoritmo en lugar de usar funciones incorporadas de Java:
fuente
Puedes usar el método
split
:fuente
Para dividir una cadena, usa String.split (regex). Revise los siguientes ejemplos:
Salida
Nota:
Esta división (regex) toma una expresión regular como argumento. Recuerde escapar de los caracteres especiales regex, como punto / punto.
fuente
fuente
Para dividir una cadena, use
String.split(regex)
:Salida:
fuente