una tochararray parte palabras manejo guardar extraer convertir caracteres cadenas cadena arreglo array java string spaces words

tochararray - string to char array java



Conversión de una cadena de oraciones a una matriz de cadenas de palabras en Java (14)

Necesito que mi programa Java tome una cadena como:

"This is a sample sentence."

y convertirlo en una matriz de cadenas como:

{"this","is","a","sample","sentence"}

Sin períodos, o puntuación (preferiblemente). Por cierto, la entrada de cadena es siempre una oración.

¿Hay una manera fácil de hacer esto que no estoy viendo? ¿O realmente tenemos que buscar espacios mucho y crear nuevas cadenas desde las áreas entre los espacios (que son palabras)?


Ahora, esto se puede lograr solo con split ya que toma regex:

String s = "This is a sample sentence with []s."; String[] words = s.split("//W+");

esto dará palabras como: {"this","is","a","sample","sentence", "s"}

El //W+ coincidirá con todos los caracteres no alfabéticos que ocurren una o más veces. Entonces no hay necesidad de reemplazar. Usted puede verificar otros patrones también.


Intenta usar lo siguiente:

String str = "This is a simple sentence"; String[] strgs = str.split(" ");

Eso creará una subcadena en cada índice de la matriz de cadenas utilizando el espacio como punto de división.


La mejor y más fácil respuesta que puedo pensar es utilizar el siguiente método definido en la cadena java:

String[] split(String regex)

Y simplemente haz "This is a sentence sentence" .split (""). Debido a que toma una expresión regular, también puedes dividir más complicado, lo que puede incluir eliminar la puntuación no deseada y otros caracteres similares.


Lo que sigue es un fragmento de código que divide una frase a palabra y también da su conteo.

import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class StringToword { public static void main(String[] args) { String s="a a a A A"; String[] splitedString=s.split(" "); Map m=new HashMap(); int count=1; for(String s1 :splitedString){ count=m.containsKey(s1)?count+1:1; m.put(s1, count); } Iterator<StringToword> itr=m.entrySet().iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } }


Otra forma de hacerlo es StringTokenizer. ex:-

public static void main(String[] args) { String str = "This is a sample string"; StringTokenizer st = new StringTokenizer(str," "); String starr[]=new String[st.countTokens()]; while (st.hasMoreElements()) { starr[i++]=st.nextElement(); } }


Prueba esto:

String[] stringArray = Pattern.compile("ian").split( "This is a sample sentence" .replaceAll("[^//p{Alnum}]+", "") //this will remove all non alpha numeric chars ); for (int j=0; i<stringArray .length; j++) { System.out.println(i + " /"" + stringArray [j] + "/""); }


Puede usar BreakIterator.getWordInstance para buscar todas las palabras en una cadena.

public static List<String> getWords(String text) { List<String> words = new ArrayList<String>(); BreakIterator breakIterator = BreakIterator.getWordInstance(); breakIterator.setText(text); int lastIndex = breakIterator.first(); while (BreakIterator.DONE != lastIndex) { int firstIndex = lastIndex; lastIndex = breakIterator.next(); if (lastIndex != BreakIterator.DONE && Character.isLetterOrDigit(text.charAt(firstIndex))) { words.add(text.substring(firstIndex, lastIndex)); } } return words; }

Prueba:

public static void main(String[] args) { System.out.println(getWords("A PT CR M0RT BOUSG SABN NTE TR/GB/(G) = RAND(MIN(XXX, YY + ABC))")); }

Ouput:

[A, PT, CR, M0RT, BOUSG, SABN, NTE, TR, GB, G, RAND, MIN, XXX, YY, ABC]


Puedes dividir tu cadena así usando esta expresión regular

String l = "sofia, malgré tout aimait : la laitue et le choux !" <br/> l.split("[[ ]*|[,]*|[//.]*|[:]*|[/]*|[!]*|[?]*|[+]*]+");


Puedes usar un código de seguimiento simple

String str= "This is a sample sentence."; String[] words = str.split("[[ ]*|[//.]]"); for(int i=0;i<words.length;i++) System.out.print(words[i]+" ");



Utilice string.replace(".", "").replace(",", "").replace("?", "").replace("!","").split('' '') para dividir su código en una matriz sin puntos, comas, signos de interrogación o signos de exclamación. Puede agregar / eliminar tantas llamadas de reemplazo como desee.


Ya publiqué esta respuesta en alguna parte, lo haré aquí de nuevo. Esta versión no usa ningún método incorporado importante. Obtuvo la matriz de caracteres, la convirtió en una cadena. ¡Espero eso ayude!

import java.util.Scanner; public class SentenceToWord { public static int getNumberOfWords(String sentence) { int counter=0; for(int i=0;i<sentence.length();i++) { if(sentence.charAt(i)=='' '') counter++; } return counter+1; } public static char[] getSubString(String sentence,int start,int end) //method to give substring, replacement of String.substring() { int counter=0; char charArrayToReturn[]=new char[end-start]; for(int i=start;i<end;i++) { charArrayToReturn[counter++]=sentence.charAt(i); } return charArrayToReturn; } public static char[][] getWordsFromString(String sentence) { int wordsCounter=0; int spaceIndex=0; int length=sentence.length(); char wordsArray[][]=new char[getNumberOfWords(sentence)][]; for(int i=0;i<length;i++) { if(sentence.charAt(i)=='' '' || i+1==length) { wordsArray[wordsCounter++]=getSubString(sentence, spaceIndex,i+1); //get each word as substring spaceIndex=i+1; //increment space index } } return wordsArray; //return the 2 dimensional char array } public static void main(String[] args) { System.out.println("Please enter the String"); Scanner input=new Scanner(System.in); String userInput=input.nextLine().trim(); int numOfWords=getNumberOfWords(userInput); char words[][]=new char[numOfWords+1][]; words=getWordsFromString(userInput); System.out.println("Total number of words found in the String is "+(numOfWords)); for(int i=0;i<numOfWords;i++) { System.out.println(" "); for(int j=0;j<words[i].length;j++) { System.out.print(words[i][j]);//print out each char one by one } } } }


string.replaceAll () no funciona correctamente con la configuración regional diferente de la predefinida. Al menos en jdk7u10.

Este ejemplo crea un diccionario de palabras del archivo de texto con el juego de caracteres cirílico de Windows CP1251

public static void main (String[] args) { String fileName = "Tolstoy_VoinaMir.txt"; try { List<String> lines = Files.readAllLines(Paths.get(fileName), Charset.forName("CP1251")); Set<String> words = new TreeSet<>(); for (String s: lines ) { for (String w : s.split("//s+")) { w = w.replaceAll("//p{Punct}",""); words.add(w); } } for (String w: words) { System.out.println(w); } } catch (Exception e) { e.printStackTrace(); }


String.split() hará la mayor parte de lo que desee. Es posible que deba recorrer las palabras para sacar cualquier puntuación.

Por ejemplo:

String s = "This is a sample sentence."; String[] words = s.split("//s+"); for (int i = 0; i < words.length; i++) { // You may want to check for a non-word character before blindly // performing a replacement // It may also be necessary to adjust the character class words[i] = words[i].replaceAll("[^//w]", ""); }