Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена Е на Ё в строке. как бы написать коду по меньше? 
:(
    Опции темы
dailapu
  Дата 28.10.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 27.1.2008

Репутация: нет
Всего: нет



Нужно: написать метод, где он принимал бы строку и возвращал(изменённую) строку.
Казалось бы какие проблемы!? Но.
Дело в том что нужно: 
1)заменить не только одно слово но (елка=ёлка...),
2) но и ряд слов на ряд слов(все человеческое=всё человеческое...)
3) все эти слова должны быть считаны из текстового файла словаря(если их прописывать в проге в массиве, то а- слишком большой вес,б- невозможность доболять/удалять новые слова)

Я то решил эту проблему следующим образом:
Мы считываем первый фаил(одиночных слов)->дальше рубим(Split)на массив где содержимое ячейки занимает(автощетку=автощЁтку) )->дальше в цикле опять рубим по ячейки(ещё два массива) в результате чего получается  четная это индекс(в пер.мас.), а нечетная значение(во втор.мас.).
И уже потом ищем и заменяем...
Тоже самое проделываем(счит. Фаил. рубим, рубим...) и со вторым словарем(((
//------------------------------------------------------------
 Код получается рабочим, хотя довольно и большим(около 200 строк) И я бы сделал его если бы смог вспомнить как работать с “Properties” и тому подобной шнягой в виде связных списков. 
ПЛИЗИ, ГОСПОДА ХОРОШИЕ. КАК вы можете продемонстрировать какой-нибудь пример какого-нибудь списка, где было бы понятно, как обращаться(изымать,добавлять(по отдельности)) к и индексу и значению у какого-нибудь 
Properties? И ещё просьба если напишете, перебирате пожалуйста for’ом, а не while итераторы..прывычка)))
Зы
Понимаю  что вопрос идиотский но в книге об этом слишком мало сказано, пришлось искать обходные пути)))

Код

package govorilkin;

import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;

public class Test {
    private String proverayemayaStroka="Было его или небыло, но Сема хотел ежика, и все было ежик";
    private String vremMas[],vremMas2[],end_mas_index[],end_mas_znach[];
    private StringBuffer per0,per1,buffer_2,per0double,per1double;
    private String tr , nb;

    public Test() throws IOException {


        per0=new StringBuffer();
    per1=new StringBuffer();

        
    int i=0;
// ЗАМЕНИТЕ ПУТЬ К СЛОВАРЮ НА ВАШ
        try{
          BufferedReader input =new BufferedReader(new FileReader("C://dlyadgavi//Govorilkin//src//bukva-E.txt"));
     StringBuffer buffer = new StringBuffer();
     String text;
     //создать новый словарь
    String o;

     while((text= input.readLine())!=null){
         buffer.append(text);
 }
 o=buffer.toString();
 vremMas =o.split("&");
 String d;

 for(int j=0; j<vremMas.length;j++){
        //System.out.println("массив содержит: "+vremMas[j]+'\n');
        d =vremMas[j];
          //System.out.println("Д содержит: "+d+'\n');
       vremMas2= d.split(" = ");

             for(int k=0; k<1;k++){
                per0.append(vremMas2[0].toString()+"&");
              per1.append(vremMas2[1].toString()+"&");
          }
    }//от цикла

    //--------------КОНЕЦ СЧИТЫВАНИЯ  СЛОВАРЯ
     input.close();
      }catch(IOException  ie){
          System.out.println(ie);
          System.exit(0);
   }
    //System.out.println("индекс2 содержит: "+per0+'\n'+"значен2 содержит: "+per1);
      //---------Заганяем все массивы
end_mas_index=per0.toString().split("&");
end_mas_znach=per1.toString().split("&");

         System.out.println("индекс1 содержит: "+end_mas_index[1]+'\n'+"значен1 содержит: "+end_mas_znach[1]);
         tr=proverayemayaStroka;

 //--------------НАЧИНАЕМ ПРОВЕРЯТЬ
 // режем входную строку на масиив

  String porezanieSlova[]=proverayemayaStroka.split("[.,!?\\|`@#$%^&*()-_+=/~<>:;'[ ]]");
  //удаляем дупликаты

  //начинаем искать
  for(int t=0; t<porezanieSlova.length; t++){
  for(int j=0; j<end_mas_index.length; j++){
   // если нашли
       if(porezanieSlova[t].equalsIgnoreCase(end_mas_index[j])==true){

               //System.out.println("нашли слово  "+porezanieSlova[t]);
              //System.out.println("ДО замены дупликат "+proverayemayaStroka);

             nb=   tr.replaceAll(porezanieSlova[t],end_mas_znach[j]);//end_mas_znach[j]



               //System.out.println("после замены дупликат "+nb);
              //System.out.println("знач значени "+end_mas_znach[j]);
              tr=nb;
       }//от ифа
   }//от fora
  }//от fora

  System.out.println("после замены дупликат "+nb);
}

    public static void main(String[] args) throws IOException {
        Test test = new Test();
    }


}




/// СЛОВАРЬ bukva-E.txt
автоподъёмнике = автоподъёмнике&
автоподъёмники = автоподъёмники&
автоподъёмников = автоподъёмников&
автоподъёмником = автоподъёмником&
Сема = Сёма&
ежик = ёжик&
ежика = ёжика&
лежа = лёжа&
автощетку = автощётку&
автощеток = автощёток&
аистенка = аистёнка&
аистенке = аистёнке&
аистенком = аистёнком&
аистенку = аистёнку&

PM MAIL   Вверх
ecologist
Дата 28.10.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 2
Всего: 9



Код

properties = new Properties();

try {
    properties.load("Файл_с_твоими_словами");
} catch (IOException e) {
    e.printStackTrace();
}

// ну и находи нужное тебе слово
String word = properties.getProperty(<слово>);


PM MAIL   Вверх
w38
Дата 28.10.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 4.12.2006
Где: Украина, Одесса

Репутация: нет
Всего: нет



а амперсанды зачем? переноса строки не достаточно для опознания конца слова ?
Properties это хорошо, но если задача учебная, то советую познакомиться с java.util.HashMap<String, String>
PM MAIL ICQ   Вверх
powerOn
Дата 28.10.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Цитата(w38 @  28.10.2008,  12:34 Найти цитируемый пост)
Properties это хорошо, но если задача учебная, то советую познакомиться с java.util.HashMap<String, String> 


Я так понимаю, что ecologist, подсказал использовать класс Properties с целю избавиться от ручного парсинга файла. С HashMap телодвижений придется для этого больше сделать.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
dailapu
  Дата 8.11.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 27.1.2008

Репутация: нет
Всего: нет



w38 У меня с этим делом постоянно какая-то проблема, просто заметил что есть разница между:
Прочитать фаил с ж.диска-изъять из текстового окна- или из переменной, к тому же в разных операционках разные \n или \r\n така будет лучше)))



Нашел литературу по этим спискам, НО, выяснилась следующая щняга:
Есть там такой метод кажется store(); он сохраняет данные на диск. И здеь фся закавыка, не Propirties не подобные вещи не работают с кириллицей(не работает когда используете чтение -запись) В лучшем случаи выдадут уникод, в худшем знак вопроса.

Тута до другой вещи додумался, прямо за нобелевской премией лететь надо.На  черта здесь вообще нужны эти забугорошные«словари»? Куда проще сделать следующие запихнуть всё в один массив, где каждая вторая ячейка будет в себе содержать «значение» ,а  преведущая ячейкаи «индекс». При обходе просто запрашивать каждый вторую ячейку массива)))

И вот ещё что, здесь вопрос стал о скорострельности джавы))) Кажется пока что единственным возможным остается следующий подход в деле обработке словарей(касаемо проверки не более одного слова):
1Мы рубим весь текст на массив слов(сплитом или токинезером) 
2дальше создаем новый массив из преведушего, с тем лишь отличием ,что в нём сохраняются только уникальные слова,
3 После начинаем искать двоичным поиском.(причём мы ищем слова из текста  в словаре, а не слова из словаря в тесте)
 Или можно придумать что-то получще!?
Зы
Всё не могу, надо новый топик создавать по обработке строк)))


Это сообщение отредактировал(а) dailapu - 8.11.2008, 11:04
PM MAIL   Вверх
mbasil
Дата 11.11.2008, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



Вот так, к примеру можно прочитать Properties на русском языке:
Код

import java.io.*;
import java.util.Properties;
//-----------------------
public class PropertyRuTest 
{
  private static String fileName = "D:/W_J/db.properties";
  public static final String LINESEP =
              System.getProperty("line.separator");
  private Console cons = System.console();
  private Properties dbProp = new Properties();
//-----------------------------------  
 public PropertyRuTest()
  {
        makeProperties( fileName );
  }
//-----------------------------------------------------------------
  public void printProp()
  {
    cons.printf( (String)dbProp.get( "UserName" ) + LINESEP );
    cons.printf( (String)dbProp.get( "test" ) + LINESEP );
    cons.printf( (String)dbProp.get( "Password" ) + LINESEP );
  } 
//-----------------------------------------------------------------
public void makeProperties( String f_name )
{
    File file = new File( f_name );
    InputStreamReader ir = null;
    String encoding = null;
    try {
          FileReader fr = new FileReader( file );
          encoding = fr.getEncoding(); 
          fr.close();
      ir = new InputStreamReader( new FileInputStream( file ), encoding);
              dbProp.load( ir  );
    }
    catch( FileNotFoundException fileNotFoundException ) {
      cons.printf( " Невозможно прочитать файл :" + f_name );
      System.exit(0);
    }
    catch(IOException ioException) {
      cons.printf( "Ошибка чтения файла :" + f_name
        + " Exception :" + ioException.getMessage() );
      System.exit(0);
    }
   finally {
        try { if ( ir != null ) ir.close();
         } catch ( IOException e2 ) {}
    }
}
//--------------------------------------------------------
  public static void main(String[] args)
  {
    PropertyRuTest pr = new PropertyRuTest();
    pr.printProp();
  }
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.