(PSEUDO) EDITOR DE TEXTO
Autor: Marco Aurelio | Publicado: 2012-11-10T03:50:00-08:00


package editor;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
public class Editor {
 /**
  * Faça um Editor de textos primitivo c/ o seguinte menu
  * 1 - Digitar uma linha
  * 2 - Digitar Textos até que "sair" seja digitado
  * 3 - Exibir
  * 4 - Remover a Linha: informar numero da linha
  * 5 - Editar Linha: informar numero da linha
  * 6 - Limpar
  * 7 - Localizar: Pergunta pela palavra
  * 8 - Substituir: Pergunta pela palavra antiga, nova e substitui.
  *   * @param args
  */ 
 private static ArrayList&lt;String&gt; texto = new ArrayList&lt;String&gt;();
 private static String linha;
 private static String nova;
 private static String palavra;
 private static String linhas;
 private static int op;
 
 
 // DIGITAR UMA UNICA LINHA
 public static void setLinha(String linha){
  texto.add(linha);
 }
 
 // DIGITAR VARIAS LINHAS
 public static void setLinhas(){
  do{
  linhas = JOptionPane.showInputDialog("Digite nova linha. &lt;sair&gt;, para encerrar digitação"); 
  if (linhas.equals("sair")){ // "equals" usado para comparar strings
  break;}
  else{texto.add(linhas);}
  }while(!(linhas.equals("sair")));
 }
 
 // EXIBIR O TEXTO
 public static void getTexto(){
  int i = 0;
  for (String s : texto) {
  linha = texto.get(i);
  System.out.println(linha);
  i++;
  }
 }
 
 // REMOMVER UMA LILNHA
 public static void remLinha(int pos){
  texto.remove(pos);
  getTexto();
 }
 
 // EDITAR UMA LINHA
 public static void editLinha(int pos, String linha){  
  texto.set(pos, linha);
  getTexto();
 }
 
 // APAGARR O ARRAY
 public static void limpar(){
  if (JOptionPane.showConfirmDialog(null, "Deseja realmente limpar todo o texto?")==JOptionPane.YES_OPTION){
  texto.clear();}
 }
 
 // ENCONTRAR UMA PALAVRA OU SEQUENCIA DE CARACTERES
 public static void localizar(){
  palavra = JOptionPane.showInputDialog("Digite a sequencia que deseja localizar");
  int aux = 0;
  int i = 0;
  for (String s : texto) {
   linha = texto.get(i);
   if(linha.contains(palavra)){
    //JOptionPane.showMessageDialog(null, "palavra ("+palavra+") encontrada na linha "+i);
   System.out.println("palavra ("+palavra+") encontrada na linha "+i);
   aux = 1;
   }
   i++;
   }
  if (aux == 0){System.out.println("Palavra ("+palavra+") não encontrada no texto");}
 }
 public static void substituir(){
  palavra = JOptionPane.showInputDialog("Digite a palavra a ser substituida");
  nova = JOptionPane.showInputDialog("Digite a nova palavra");
  int aux = 0;
  op = 0;
  op = Integer.parseInt(JOptionPane.showInputDialog("Digite: \n 1 - Substituir a primeira ocorrencia.\n 2 - Substituir todas as ocorrencias."));
   int i = 0;
    for (String s : texto) {
     linha = texto.get(i); // pega a linha na posiÃ§Ã§Ã£o "i" do ArrayList texto
     if(linha.contains(palavra)){ // verifica se a linha contem (contains) a palavra a ser trocada
      if (op == 1){
      linha = linha.replaceFirst(palavra, nova);// troca a palavra pela nova, na linha
      texto.set(i, linha);//
      aux = 1;
      break;}// Se foi escolhido substituir apenas a primeira ocorrencia (op == 1), para por aqui
      else if (op == 2){
      linha = linha.replaceAll(palavra, nova);// troca a palavra pela nova, na linha
      texto.set(i, linha);
      aux = 1;
      }
     }
     i++;
    }
    if (aux == 0){System.out.println("Palavra ("+palavra+") não encontrada no texto");}
 }
 
 public static void salvar(String endereco, String arquivo) {
  try {
   String end = endereco+"\\"+arquivo;
   FileWriter file = new FileWriter(end, false);
    int i = 0;
    for (String s : texto){
     linha = texto.get(i)+System.getProperty("line.separator");
     file.write(linha);
     i++;
     }
     file.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   System.out.println("Endereço não encontrado");
  }  
 }
 
 public static void abrir(String endereco, String arquivo) {
  texto.clear();
  try {
   String end = endereco+"\\"+arquivo;
   BufferedReader file = new BufferedReader(new FileReader(end));
    int i = 0;
    do{
     linha = file.readLine();
     if (linha != null){
     texto.add(i, linha);}
     i++;
     }while(linha != null);
     file.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   
   System.out.println("Endereço não encontrado");
  }  
 }

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  int acao;
  do{
  acao = Integer.parseInt(JOptionPane.showInputDialog("Escolha uma das opções:\n1 - Digitar uma linha\n2 - Digitar linhas: &lt;sair&gt; para encerrar\n3 - Exibir\n4 - Remover Linha\n5 - Editar Linha\n6 - Limpar\n7 - Localizar\n8 - Substituir\n9 - Salvar\n10 - Abrir\n11 - Encerrar")); 
  switch (acao) {
  case 1:
    setLinha(JOptionPane.showInputDialog("Digite a linha"));   
   break;
  case 2:
    setLinhas();
   break;   
  case 3:
    getTexto(); 
   break;
  case 4:
    remLinha(Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da linha que deseja remover"))); 
   break;
  case 5:
    editLinha(Integer.parseInt(JOptionPane.showInputDialog("Digite o numero da linha que deseja editar")), JOptionPane.showInputDialog("Digite a linha"));
     
   break;
  case 6:
    limpar(); 
   break;
   
  case 7:
    localizar();  
   break;
  case 8:
    substituir();  
   break;
   
  case 9:
    salvar(JOptionPane.showInputDialog("Digite o endereço a ser salvo o arquivo"),JOptionPane.showInputDialog("Digite o nome do arquivo")); 
   break;
   
  case 10:
    abrir(JOptionPane.showInputDialog("Informe o local do arquivo"),JOptionPane.showInputDialog("Digite o nome do arquivo"));  
   break;
   
  case 11:
   
   break;

  default:
   JOptionPane.showMessageDialog(null, "Escolha apenas as opções de 1 a 9");
   break;
  }
  }while(acao != 11);
 }

}