Revision: 55876
Updated Code
at February 27, 2012 18:51 by N-genhocas
Updated Code
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.util.StringTokenizer; public class FileTools { /** Metodo que remove letras de um texto * * @param orders Ficheiro que contem as letras a remover * @param in Ficheiro a ser editado * @param out Ficheiro de Saida * @throws IOException File not Found se o ficheiro de entrada nao existir */ static void removeLetters( BufferedReader orders, BufferedReader in, BufferedWriter out ) throws IOException{ String orderRemove, input; //Vao guardar respectivamente as letras a remover, a frase actual StringBuilder sb = new StringBuilder(); //Vai permitir transpor as letras todas a remover do ficheiro //Para uma string StringBuilder sbout = new StringBuilder(); //Vai conter o texto final para ser escrito em ficheiro while((orderRemove = orders.readLine()) != null){ sb.append(orderRemove); } orderRemove = sb.toString(); //Este ciclo corre o ficheiro de entrada ate ao fim while((input = in.readLine()) != null){ //Este ciclo corre todos os carateres da linha actual do ficheiro de entrada for(int i = 0; i < input.length(); i++){ int flag = 0; //Corre o ficheiro de ordens para cada letra do de entrada for(int j = 0; j < orderRemove.length() ; j++){ //Se a letra do ficheiro de entrada na posicao j //corresponder a uma letra existente no ficheiro //de orders incrementa-se a flag if(input.charAt(i) == orderRemove.charAt(j) ){ flag++; } } //Se a flag for zero, significa que a letra nao estava no //ficheiro, logo adiciona-se ao SB if(flag == 0){ sbout.append(input.charAt(i)); } } sbout.append("\n"); //Dá o paragrafo } //Escreve tudo para o ficheiro out.write(sbout.toString()); //System.out.print(sbout.toString()); } /** Metodo que capitaliza o texto de entrada de acordo com as ordens fornecidas num ficheiro orders * * @param orders Ficheiro que contem a ordem de capitalizacao * @param in Ficheiro de entrada * @param out Ficheiro editado * @throws IOException File not Found se não existir o ficheiro de entrada pedido */ static void capitalize( BufferedReader orders, BufferedReader in, BufferedWriter out ) throws IOException{ String input,output = ""; int orderCapitalize; StringBuilder sb = new StringBuilder(); StringBuilder sbout = new StringBuilder(); sb.append(orders.readLine()); orderCapitalize = Integer.parseInt(sb.toString()); if(orderCapitalize == 0){ //Tudo em minusculas while((input = in.readLine()) != null){ //System.out.print(output.concat(input.toLowerCase()+"\n")); out.write(output.concat(input.toLowerCase()+"\n")); } } if(orderCapitalize == 1){ //Tudo em maiusculas while((input = in.readLine()) != null){ //System.out.print(output.concat(input.toUpperCase()+"\n")); out.write(output.concat(input.toUpperCase()+"\n")); } } if(orderCapitalize == 2){ //A primeira letra de Cada frase e maiuscula while((input = in.readLine()) != null){ //ciclo que percorre cada caracter por linha int posix=0; for(int i = 0; i < input.length(); i++){ //Se o caracter nao for um . if(input.charAt(i) != '.'){ //Se diferente de posix manter a capitalizacao minuscula if(i != posix) sbout.append(input.charAt(i)); //Adiciona a primeira letra da linha if(i==0) sbout.append(input.toUpperCase().charAt(i)); //Se for um ponto }else{ //Guarda a posicao da letra certa a capitalizar posix = i+2; //Adicioma o espaço sbout.append(input.charAt(i)); } //Quando o i chega a posicao posix capitaliza a letra if( i == posix && i != 0){ sbout.append(input.toUpperCase().charAt(i)); } } //Dá o pararagrafo a cada linha do ficheiro (senao fica tdo em frente) sbout.append("\n"); } } //System.out.println(sbout.toString()); //Linha de codigo para debugging out.write(sbout.toString()); } /** Metodo que conta o numero de ocorrencias de todas as palavras e ordena-as por ordem decrescente * * @param in Ficheiro de entrada * @param out Ficheiro com o histograma * @throws IOException File not Found se o ficheiro de entrada não existir */ static void histogram( BufferedReader in, BufferedWriter out ) throws IOException{ int[]frequencia = new int[1000]; //Conta a frequencia das palavras String[]linha = new String[1000]; //Stores the words already without repetition (filtered) String input, temp; //input recebe linha do ficheiro, temp serve para analise de length StringBuilder sb = new StringBuilder(); //Coloca as frases do ficheironum stringbuilder formatadas para n ter maisculas while((input = in.readLine()) != null){ sb.append(input.toLowerCase().replaceAll("[^a-z]", "\n")); } //Permite contar com facilidade o numero de palavras por linha [xx.countTokens();] StringTokenizer st = new StringTokenizer(sb.toString()); //Cria um array de strings com a quantidade de palavras certa por linha String[]inputText = new String[st.countTokens()]; //Coloca as palavras do ficheiro num vector for(int i = 0; i < inputText.length; i++){ //guarda o token corrente para se poder efectuar ops sobre ele caso contrario st.nextToken() //invoca o promixo e nao se pode retirar por exemplo o tamanho do actual temp = st.nextToken(); //Se essa palavra tiver comprimento maior que um agrega ao array if(temp.length() > 1){ inputText[i] = temp; //Caso contrario Guarda NODATA no array para nao ficar null }else{ inputText[i] = "NODATA"; } } //Este ciclo corre o vector onde vao ser armazenadas as palavras for(int j=0; j < linha.length; j++){ //Este ciclo percorre o vector de TODAS AS PALAVRAS for (int i = 0; i < inputText.length; i++) { //Procura a proxima pos no vector que nao esteja a branco if(inputText[i]!="NODATA"){ //Atribui a proxima palavra localizada a posicao actual do vector linha[j]= inputText[i]; break; } } if(linha[j] != null){ //Guarda a frequencia da palavra no respectivo lugar frequencia[j] = contaPalavra(inputText, linha[j]); //Apaga essa palavra do array apagaPalavra(inputText, linha[j]); } } //Imprime no ficheiro as cenas todas ordenadinhas out.write(buildHistogram(frequencia, linha).toString()); } /** Metodo que conta a ocorrencia de uma determinada palavra * * @param arrayString Array de Strings * @param palavra Palavra a verificar ocorrencia * @return Quantidade de vezes que ocorre a palavra no vector */ private static int contaPalavra(String[] arrayString, String palavra){ int quantidade=0; for (int k = 0; k < arrayString.length; k++) { if(palavra.contentEquals(arrayString[k])){ quantidade++; } } return quantidade; } /** Metodo que apaga todas as ocorrencias de uma palavra num vector * * @param arrayString Array com todas as palavras * @param palavra Palavra a eliminar */ private static void apagaPalavra(String[] arrayString, String palavra){ for (int l = 0; l < arrayString.length; l++) { if(palavra.contentEquals(arrayString[l])){ arrayString[l]="NODATA"; } } } /** Metodo que imprime que constroi o histograma ordenado * * @param array Array de inteiros correspondente às frequencias * @param linha Array que contem as palavras * @return Um objecto do tipo StringBuilder com o histograma ordenado e pronto a imprimir */ public static StringBuilder buildHistogram(int[] array, String[] linha){ StringBuilder sbout = new StringBuilder(); int[]pos = new int [array.length]; //Guarda a posicao relativa do valor da freq de uma certa palavra int temp, posTemp; for (int k = 0; k < pos.length; k++) { pos[k]=k; } for (int j = 0; j < array.length; j++) { for (int i = 1; i < array.length; i++){ if(array[i] > array[i-1]){ //Ordena as frequencias por ordem decrescente temp = array[i-1]; array[i-1] = array[i]; array[i] = temp; //Mantém o valor do index ordenado para que a frequencia certa //condiga com a palavra certa posTemp = pos[i-1]; pos[i-1] = pos[i]; pos[i] = posTemp; } } } //Ciclo que imprime as palavras + a sua frequencia for (int i = 0; i < pos.length; i++) { //Impede que apareca escrito null no ficheiro e zeros if(linha [i] != null && array[i] != 0){ sbout.append(linha[pos[i]]+":"+array[i]+"\n"); //System.out.println(linha[pos[i]]+":"+array[i]); //out.write(linha[pos[i]]+":"+array[i]+"\n"); } } return sbout; } }
Revision: 55875
Updated Code
at February 27, 2012 01:46 by N-genhocas
Updated Code
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.util.StringTokenizer; public class FileTools { /** Metodo que remove letras de um texto * * @param orders Ficheiro que contem as letras a remover * @param in Ficheiro a ser editado * @param out Ficheiro de Saida * @throws IOException File not Found se o ficheiro de entrada nao existir */ static void removeLetters( BufferedReader orders, BufferedReader in, BufferedWriter out ) throws IOException{ String orderRemove, input; //Vao guardar respectivamente as letras a remover, a frase actual StringBuilder sb = new StringBuilder(); //Vai permitir transpor as letras todas a remover do ficheiro //Para uma string StringBuilder sbout = new StringBuilder(); //Vai conter o texto final para ser escrito em ficheiro while((orderRemove = orders.readLine()) != null){ sb.append(orderRemove); } orderRemove = sb.toString(); //Este ciclo corre o ficheiro de entrada ate ao fim while((input = in.readLine()) != null){ //Este ciclo corre todos os carateres da linha actual do ficheiro de entrada for(int i = 0; i < input.length(); i++){ int flag = 0; //Corre o ficheiro de ordens para cada letra do de entrada for(int j = 0; j < orderRemove.length() ; j++){ //Se a letra do ficheiro de entrada na posicao j corresponder a uma letra existente no ficheiro //de orders incrementa-se a flag if(input.charAt(i) == orderRemove.charAt(j) ){ flag++; } } //Se a flag for zero, significa que a letra nao estava no ficheiro, logo adiciona-se ao SB if(flag == 0){ sbout.append(input.charAt(i)); } } sbout.append("\n"); //Dá o paragrafo } //Escreve tudo para o ficheiro out.write(sbout.toString()); //System.out.print(sbout.toString()); } /** Metodo que capitaliza o texto de entrada de acordo com as ordens fornecidas num ficheiro orders * * @param orders Ficheiro que contem a ordem de capitalizacao * @param in Ficheiro de entrada * @param out Ficheiro editado * @throws IOException File not Found se não existir o ficheiro de entrada pedido */ static void capitalize( BufferedReader orders, BufferedReader in, BufferedWriter out ) throws IOException{ String input,output = ""; int orderCapitalize; StringBuilder sb = new StringBuilder(); StringBuilder sbout = new StringBuilder(); sb.append(orders.readLine()); orderCapitalize = Integer.parseInt(sb.toString()); if(orderCapitalize == 0){ //Tudo em maiusculas while((input = in.readLine()) != null){ //System.out.print(output.concat(input.toLowerCase()+"\n")); out.write(output.concat(input.toLowerCase()+"\n")); } } if(orderCapitalize == 1){ //Tudo em minusculas while((input = in.readLine()) != null){ //System.out.print(output.concat(input.toUpperCase()+"\n")); out.write(output.concat(input.toUpperCase()+"\n")); } } if(orderCapitalize == 2){ //A primeira letra de Cada frase e maiuscula while((input = in.readLine()) != null){ //ciclo que percorre cada caracter por linha int posix=0; for(int i = 0; i < input.length(); i++){ //Se o caracter nao for um . if(input.charAt(i) != '.'){ //Se diferente de posix manter a capitalizacao minuscula if(i != posix) sbout.append(input.charAt(i)); //Adiciona a primeira letra da linha if(i==0) sbout.append(input.toUpperCase().charAt(i)); //Se for um ponto }else{ //Guarda a posicao da letra certa a capitalizar posix = i+2; //Adicioma o espaço sbout.append(input.charAt(i)); } //Quando o i chega a posicao posix capitaliza a letra if( i == posix && i != 0){ sbout.append(input.toUpperCase().charAt(i)); } } //Dá o pararagrafo a cada linha do ficheiro (senao fica tdo em frente) sbout.append("\n"); } } //System.out.println(sbout.toString()); //Linha de codigo para debugging out.write(sbout.toString()); } /** Metodo que conta o numero de ocorrencias de todas as palavras e ordena-as por ordem decrescente * * @param in Ficheiro de entrada * @param out Ficheiro com o histograma * @throws IOException File not Found se o ficheiro de entrada não existir */ static void histogram( BufferedReader in, BufferedWriter out ) throws IOException{ int[]frequencia = new int[1000]; //Conta a frequencia das palavras String[]linha = new String[1000]; //Stores the words already without repetition (filtered) String input, temp; //input recebe linha do ficheiro, temp serve para analise de length StringBuilder sb = new StringBuilder(); //Coloca as frases do ficheironum stringbuilder formatadas para n ter maisculas while((input = in.readLine()) != null){ sb.append(input.toLowerCase().replaceAll("[^a-z]", "\n")); } //Permite contar com facilidade o numero de palavras por linha [xx.countTokens();] StringTokenizer st = new StringTokenizer(sb.toString()); //Cria um array de strings com a quantidade de palavras certa por linha String[]inputText = new String[st.countTokens()]; //Coloca as palavras do ficheiro num vector for(int i = 0; i < inputText.length; i++){ //guarda o token corrente para se poder efectuar ops sobre ele caso contrario st.nextToken() //invoca o promixo e nao se pode retirar por exemplo o tamanho do actual temp = st.nextToken(); //Se essa palavra tiver comprimento maior que um agrega ao array if(temp.length() > 1){ inputText[i] = temp; //Caso contrario Guarda NODATA no array para nao ficar null }else{ inputText[i] = "NODATA"; } } //Este ciclo corre o vector onde vao ser armazenadas as palavras for(int j=0; j < linha.length; j++){ //Este ciclo percorre o vector de TODAS AS PALAVRAS for (int i = 0; i < inputText.length; i++) { //Procura a proxima pos no vector que nao esteja a branco if(inputText[i]!="NODATA"){ //Atribui a proxima palavra localizada a posicao actual do vector linha[j]= inputText[i]; break; } } if(linha[j] != null){ //Guarda a frequencia da palavra no respectivo lugar frequencia[j] = contaPalavra(inputText, linha[j]); //Apaga essa palavra do array apagaPalavra(inputText, linha[j]); } } //Imprime no ficheiro as cenas todas ordenadinhas out.write(buildHistogram(frequencia, linha).toString()); } /** Metodo que conta a ocorrencia de uma determinada palavra * * @param arrayString Array de Strings * @param palavra Palavra a verificar ocorrencia * @return Quantidade de vezes que ocorre a palavra no vector */ private static int contaPalavra(String[] arrayString, String palavra){ int quantidade=0; for (int k = 0; k < arrayString.length; k++) { if(palavra.contentEquals(arrayString[k])){ quantidade++; } } return quantidade; } /** Metodo que apaga todas as ocorrencias de uma palavra num vector * * @param arrayString Array com todas as palavras * @param palavra Palavra a eliminar */ private static void apagaPalavra(String[] arrayString, String palavra){ for (int l = 0; l < arrayString.length; l++) { if(palavra.contentEquals(arrayString[l])){ arrayString[l]="NODATA"; } } } /** Metodo que imprime que constroi o histograma ordenado * * @param array Array de inteiros correspondente às frequencias * @param linha Array que contem as palavras * @return Um objecto do tipo StringBuilder com o histograma ordenado e pronto a imprimir */ public static StringBuilder buildHistogram(int[] array, String[] linha){ StringBuilder sbout = new StringBuilder(); int[]pos = new int [array.length]; //Guarda a posicao relativa do valor da freq de uma certa palavra int temp, posTemp; for (int k = 0; k < pos.length; k++) { pos[k]=k; } for (int j = 0; j < array.length; j++) { for (int i = 1; i < array.length; i++){ if(array[i] > array[i-1]){ //Ordena as frequencias por ordem decrescente temp = array[i-1]; array[i-1] = array[i]; array[i] = temp; //Mantém o valor do index ordenado para que a frequencia certa //condiga com a palavra certa posTemp = pos[i-1]; pos[i-1] = pos[i]; pos[i] = posTemp; } } } //Ciclo que imprime as palavras + a sua frequencia for (int i = 0; i < pos.length; i++) { //Impede que apareca escrito null no ficheiro e zeros if(linha [i] != null && array[i] != 0){ sbout.append(linha[pos[i]]+":"+array[i]+"\n"); //System.out.println(linha[pos[i]]+":"+array[i]); //out.write(linha[pos[i]]+":"+array[i]+"\n"); } } return sbout; } }
Revision: 55874
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 26, 2012 01:43 by N-genhocas
Initial Code
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.util.StringTokenizer; public class FileTools { static void removeLetters( BufferedReader orders, BufferedReader in, BufferedWriter out ) throws IOException{ String orderRemove, input; StringBuilder sb = new StringBuilder(); StringBuilder sbout = new StringBuilder(); while((orderRemove = orders.readLine()) != null){ sb.append(orderRemove); } orderRemove = sb.toString(); //Este ciclo corre o ficheiro de entrada ate ao fim while((input = in.readLine()) != null){ //Este ciclo corre todos os carateres da linha actual do ficheiro de entrada for(int i = 0; i < input.length(); i++){ int flag = 0; //Corre o ficheiro de ordens para cada letra do de entrada for(int j = 0; j < orderRemove.length() ; j++){ //Se a letra do ficheiro de entrada na posicao j corresponder a uma letra existente no ficheiro //de orders incrementa-se a flag if(input.charAt(i) == orderRemove.charAt(j) ){ flag++; } } //Se a flag for zero, significa que a letra nao estava no ficheiro, logo adiciona-se ao SB if(flag == 0){ sbout.append(input.charAt(i)); } } sbout.append("\n"); //Dá o paragrafo } //Escreve tudo para o ficheiro out.write(sbout.toString()); //System.out.print(sbout.toString()); } /** * * @param orders * @param in * @param out * @throws IOException */ static void capitalize( BufferedReader orders, BufferedReader in, BufferedWriter out ) throws IOException{ String input,output = ""; int orderCapitalize; StringBuilder sb = new StringBuilder(); StringBuilder sbout = new StringBuilder(); sb.append(orders.readLine()); orderCapitalize = Integer.parseInt(sb.toString()); if(orderCapitalize == 0){ //Tudo em maiusculas while((input = in.readLine()) != null){ //System.out.print(output.concat(input.toLowerCase()+"\n")); out.write(output.concat(input.toLowerCase()+"\n")); } } if(orderCapitalize == 1){ //Tudo em minusculas while((input = in.readLine()) != null){ //System.out.print(output.concat(input.toUpperCase()+"\n")); out.write(output.concat(input.toUpperCase()+"\n")); } } if(orderCapitalize == 2){ //A primeira letra de Cada frase e maiuscula while((input = in.readLine()) != null){ //ciclo que percorre cada caracter por linha int posix=0; for(int i = 0; i < input.length(); i++){ //Se o caracter nao for um . if(input.charAt(i) != '.'){ //Se diferente de posix manter a capitalizacao minuscula if(i != posix) sbout.append(input.charAt(i)); //Adiciona a primeira letra da linha if(i==0) sbout.append(input.toUpperCase().charAt(i)); //Se for um ponto }else{ //Guarda a posicao da letra a capitalizar posix = i+2; //Adicioma o espaço sbout.append(input.charAt(i)); } //Quando o i chega a posicao posix capitaliza a letra if( i == posix && i != 0){ sbout.append(input.toUpperCase().charAt(i)); } } //Dá o pararagrafo a cada linha do ficheiro (senao fica tdo em frente sbout.append("\n"); } } System.out.println(sbout.toString()); out.write(sbout.toString()); } /** * * @param in * @param out * @throws IOException */ static void histogram( BufferedReader in, BufferedWriter out ) throws IOException{ int[]frequencia = new int[1000]; //Conta a frequencia das palavras int[]rank = new int[1000]; //Serve para fazer o ranking das palavras 0 valor 1 pos no vector int[]pos = new int[1000]; //Guarda a posicao correspondente do valor de rank à palavra String[]linha = new String[1000]; //Stores the words already without repetition (filtered) String input, temp; //input recebe linha do ficheiro, temp serve para analise de length StringBuilder sb = new StringBuilder(); //Coloca as frases do ficheironum stringbuilder formatadas para n ter maisculas while((input = in.readLine()) != null){ sb.append(input.toLowerCase().replaceAll("[^a-z]", "\n")); } StringTokenizer st = new StringTokenizer(sb.toString()); String[]inputText = new String[st.countTokens()]; //Coloca as palavras do ficheiro num vector for(int i = 0; i < inputText.length; i++){ //guarda o token corrente para se poder efectuar ops sobre ele caso contrario st.nextToken() //invoca o promixo e nao se pode retirar por exemplo o tamanho do actual temp = st.nextToken(); if(temp.length() > 1){ inputText[i] = temp; }else{ inputText[i] = "NODATA"; } } //Este ciclo corre o vector onde vao ser armazenadas as palavras for(int j=0; j < linha.length; j++){ //Este ciclo percorre o vector de TODAS AS PALAVRAS for (int i = 0; i < inputText.length; i++) { //Procura a proxima pos no vector que nao esteja a branco if(inputText[i]!="NODATA"){ //Atribui a proxima palavra localizada a posicao actual do vector linha[j]= inputText[i]; break; } } if(linha[j] != null){ //Guarda a frequencia da palavra no respectivo lugar frequencia[j] = contaPalavra(inputText, linha[j]); //Apaga essa palavra do array apagaPalavra(inputText, linha[j]); } } for(int i=0; i < linha.length; i++){ if(linha[i] != null) //System.out.println(linha[i]+":"+frequencia[i]); out.write((linha[i]+":"+frequencia[i]+"\n")); } //printWords(frequencia, rank, pos); //Arruma as palavras } /** Metodo que conta a ocorrencia de uma determinada palavra * * @param arrayString Array de Strings * @param palavra Palavra a verificar ocorrencia * @return Quantidade de vezes que ocorre a palavra no vector */ private static int contaPalavra(String[] arrayString, String palavra){ int quantidade=0; for (int k = 0; k < arrayString.length; k++) { if(palavra.contentEquals(arrayString[k])){ quantidade++; } } return quantidade; } /** Metodo que apaga todas as ocorrencias de uma palavra num vector * * @param arrayString Array com todas as palavras * @param palavra Palavra a eliminar */ private static void apagaPalavra(String[] arrayString, String palavra){ for (int l = 0; l < arrayString.length; l++) { if(palavra.contentEquals(arrayString[l])){ arrayString[l]="NODATA"; } } } /* private static void printWords(int[]vector, int[]rank, int[]pos){ Arrays.sort(vector); for (int i = vector.length; i == 0; i--) { System.out.println(vector[i]); } //rank[i] = maximo; //pos[i] = position; } //System.out.println(maximo); */ }
Initial URL
Initial Description
Projecto de LabP01 que consiste na criação de uma classe que permite efectuar operações sobre ficheiros de texto.
Initial Title
LabP Project 01 [COMPLETO]
Initial Tags
file, java, text
Initial Language
Java