Necesito dividir un java cadena en una matriz de palabras. Digamos que la cadena es:

"Hi!! I need to split this string, into a serie's of words?!"

Por el momento estoy intentado usar este String[] strs = str.split("(?!\\w)") sin embargo, se mantiene símbolos como ! en la matriz y también mantiene cadenas como «¡Hola!» en la matriz así. La cadena de yo soy la división de siempre estar en minúsculas. Lo que me gustaría es que para una matriz a la que se produjo que parece:
{"hi", "i", "need", "to", "split", "this", "string", "into", "a", "serie's", "of", "words"} – Nota el apóstrofo se mantiene.

¿Cómo puedo cambiar mi expresión regex no se incluyen los símbolos de la matriz?

Disculpas, me gustaría definir la palabra como una secuencia de caracteres alfanuméricos, pero sólo con el carácter ‘ inclusive si es en el contexto anterior, tales como «es», no se si es usado para una cotización de una palabra como «‘su'». También, en este contexto, «hi» o «hi-persona» no son palabras, sino de «hi» y «persona» son. Espero que aclara la cuestión.

  • Lo que se define como una palabra? Hay al menos 2 definición diferente para él: no-espacio en blanco secuencia continua, o una secuencia de letras, dígitos+.
  • ¿Qué acerca de he said 'yes' => mantener o eliminar el presupuesto?
  • A menos que sepa lo que es una «palabra» es (bueno, no puede ser tan largo-que-se-debe-no-han-sido-permitido-a-ser-conectado-con-guiones palabras o números 34.24, o algo así como$ del año 2000), habrá un montón de respuestas apareciendo que tratar de definir una palabra para usted.
InformationsquelleAutor crazyfool | 2013-01-26

7 Comentarios

  1. 9

    Puede quitar todos los ?! símbolos y, a continuación, dividir en palabras

    str = str.replaceAll("[!?,]", "");
    String[] words = str.split("\s+");

    Resultado:

    Hi, I, need, to, split, this, string, into, a, serie's, of, words

    • Me gusta su estilo, cambie cualquiera de especial char 1 de dividir la cadena como palabra…creo que va a hacer, voy a intentarlo más tarde…
    • No hay mucha diferencia de split a lo largo de "[!?,\\s]+". (La única diferencia es que la cadena puede contener !?, al principio, y el resultado será una cadena vacía, pero esto también puede ocurrir si la cadena después de la sustitución tiene espacio en la parte delantera)
    • sí, siempre y cuando se hace lo que él quiere…estoy bien de estilo…
    • es cierto, tal vez sea más legible
  2. 3

    Debe trabajar por lo que quieres.

    String line = "Hi!! I need to split this string, into a serie's of words?! but not '' or ''' word";
    String regex = "([^a-zA-Z']+)'*\1*";
    String[] split = line.split(regex);
    System.out.println(Arrays.asList(split));

    Da

    [Hi, I, need, to, split, this, string, into, a, serie's, of, words, but, not, or, word]
  3. 2

    Si se define la palabra como una secuencia de no-caracteres de espacios en blanco (espacios en blanco caracteres definidos por \s), entonces usted puede dividir a lo largo de los caracteres de espacio:

    str.split("\s+")

    Nota que ";.';[email protected]#$>?>@4", "very,bad,punctuation", y "'goodbye'" son palabras de acuerdo a la definición anterior.

    Luego el otro enfoque es definir la palabra como una secuencia de caracteres a partir de un conjunto de caracteres permitidos. Si desea permitir que a-z, A-Z, y ' como parte de una palabra, se puede dividir a lo largo de todo lo demás:

    str.split("[^a-zA-Z']+")

    Esto le permitirá "''''''" a ser definido como una palabra, aunque.

    • Para ser claros, esto no produciría la solicitada de salida dado el ejemplo de entrada de la cuestión.
    • De acuerdo.
  4. 0

    Me gustaría utilizar str.split("[\\s,?!]+"). Usted puede agregar cualquier carácter que desea dividir con el interior de los soportes [].

  5. 0

    Usted puede filtrar los caracteres que se consideran como «no palabra» personajes:

    String[] strs = str.split("[,!? ]+");
    • Tenga en cuenta que esto también tiene el mismo problema, ya que permitirá ----------- o ''''''''''''' a ser una palabra.
    • Esto funcionará con la cadena en la pregunta. El OP necesitaría especificar cómo comillas simples serían tratados de otra manera
    • No quiero criticar tu respuesta. Sólo que sin una definición clara, simple regex solución permitirá a las cosas graciosas para ser clasificados como palabra.
  6. 0
    myString.replaceAll("[^a-zA-Z'\s]","").toLowerCase().split("\s+");

    replaceAll("[^a-zA-Z'\\s]","") método reemplaza todos los caracteres que no son a-z o A-Z o ' o un whitespace con nada ("") y, a continuación, toLowerCase método de hacer todos los caracteres devueltos desde replaceAll método minúsculas. Por último, estamos splitting de la cadena en términos de espacio en blanco char. más legible uno;

    myString = myString.replaceAll("[^a-zA-Z'\s]","");
    myString = myString.toLowerCase();
    String[] strArr = myString.split("\s+");
    • Es posible que desee incluir un poco más de información en lugar de una sola línea. Me sale que podría responder a la pregunta, pero su respuesta es haciendo estallar para arriba en la «baja calidad» de la revisión de la cola. Si suficiente gente voto para su eliminación, podría desaparecer en algún momento.
    • Lo siento, se agrega una explicación en detalle.

Dejar respuesta

Please enter your comment!
Please enter your name here