2016-04-16 3 views
0

Я пытаюсь изменить символы; аа а, е к и ае к острову.Как заменить 2 указанных символы с указанной charecter

Мой текст входной файл

«Sjøen Aer жарко сегодня возможно мы проплыть d Aer. Там Aer vaeldigt прикольно плавать d AER. Моя мама говорит, для меня всегда холодно, и это время занимает много времени ».

Выход Должно быть так:

«озеро жарко сегодня может быть, мы будем плавать там Это большое удовольствие плавать там Моя мама говорит мне, что там всегда холодно и идут.. время занимает много времени ».

Мой вопрос: что я делаю не так? Благодарим вас за помощь и комментарий.

это мой код

public static void main(String[] args) throws IOException { 

    String fileName = JOptionPane.showInputDialog("Enter the file name"); 



     BufferedReader inputCurrent = new BufferedReader(new FileReader(fileName)); 
     PrintWriter outputCurrent = new PrintWriter(new BufferedWriter(new FileWriter("file.txt"))); 
     String row1; 

     while((row1 = inputCurrent.readLine())!=null) 
     { 
      String aa = "å"; 
      String ae = "ä"; 
      String oe = "ö"; 


      if(row1.equals(aa)) 
      { 
       String replacing = row1.replaceAll(row1, aa); 
       outputCurrent.println(replacing); 
      } 

      if(row1.equals(ae)) 
      { 
       String replacing = row1.replaceAll(row1, aa); 
       outputCurrent.println(replacing); 
      } 

      if(row1.equals(oe)) 
      { 
       String replacing = row1.replaceAll(row1, aa); 
       outputCurrent.println(replacing); 
      } 


     } 
     outputCurrent.close(); 
     inputCurrent.close(); 


     inputCurrent = new BufferedReader(new FileReader("file.txt")); 
     outputCurrent = new PrintWriter(new BufferedWriter(new FileWriter(fileName))); 
     while(true) 
     { 
      String row2 = inputCurrent.readLine(); 
      if(row2==null) 
       break; 
      outputCurrent.println(row2); 
     } 
     outputCurrent.close(); 
     inputCurrent.close(); 
    } 
} 
+0

Подсказка: '.equals' не собирается вырезать его, если вы хотите, чтобы заменить щепку строки. – Makoto

+0

Подсказка 2: Приведенный выше код заменяет _все_ ваши шаблоны двухсимвольных вручную Вы никогда не увидите или остров – ajb

+0

постскриптума.. Не используйте тег «fix» для исправления. Этот тег для чего-то совершенно другого. Я удалил его. – ajb

ответ

2

replaceAll берет образец в качестве первого аргумента. Вы должны использовать replace. Кроме того, вы ищете equals В то время как вы должны делать contains так:

if(row1.contains("aa")) 
    row1.replace("aa", aa); 

Но этот путь будет заменить все «AA» вхождения в

Смотрите этот код:

String input = "sjoen aer varmt idag kanske kommer vi att simma daer. " 
     + "Det aer vaeldigt roligt att simma daer. " 
     + "Min mamma säger till mig att daer aer alltid kallt och att aaka tid tar mycket tid."; 
String output = "sjön är varmt idag kanske kommer vi att simma där. " 
     + "Det är väldigt roligt att simma där. " 
     + "Min mamma säger till mig att där är alltid kallt och att åka tid tar mycket tid."; 

input = input.replace("aa", "å").replace("ae", "ä").replace("oe", "ö"); 

System.out.println(input); 
//prints 
//sjön är varmt idag kanske kommer vi att simma där. 
//Det är väldigt roligt att simma där. 
//Min mamma säger till mig att där är alltid kallt och att åka tid tar mycket tid. 
System.out.println(input.equals(output));//true 
+0

Благодарим вас за ответ @Johnson. Я попытался, но это не сработало. Я открыл файл, чтобы проверить его, и он пуст. –

+0

Ваш вывод имеет содержание, которое не изменилось до места.Это то, что вы хотите? Если это так, то это не путь к нему. Вы должны сделать замену словом на слово. –

+1

Вы не накапливаете несколько изменений. Вы делаете первую замену, записываете ее, выкидываете, применяете вторую подстановку к исходной строке, записываете ее, отбрасываете, а затем применяете третью подстановку к исходной строке. –

0

Возможно, это было бы эффективно и лучше с помощью методов. Как я сказал, я начинаю и ценю твою помощь.

String fileName = JOptionPane.showInputDialog("Enter the file name"); 

BufferedReader inputCurrent = new BufferedReader(new FileReader(fileName)); 
    PrintWriter outputCurrent = new PrintWriter(new BufferedWriter(new FileWriter("file.txt"))); 
    String row1; 
    String replacing = null; 
    String å,ä,ö; 

    while((row1 = inputCurrent.readLine())!=null) 
    { 
     String aa = "å"; 
     String ae = "ä"; 
     String oe = "ö"; 


     if(row1.contains("aa")) 
     { 
      row1 = row1.replaceAll("aa", aa); 

     } 


     if(row1.contains("ae"))     { 
      row1 = row1.replaceAll("ae", ae); 

     } 

     if(row1.contains("oe")) 
     { 
      row1 = row1.replaceAll("oe", oe); 

     } 
     outputCurrent.println(row1); 


    } 
    outputCurrent.close(); 
    inputCurrent.close(); 


    inputCurrent = new BufferedReader(new FileReader("file.txt")); 
    outputCurrent = new PrintWriter(new BufferedWriter(new FileWriter(fileName))); 
    while(true) 
    { 
     String row2 = inputCurrent.readLine(); 
     if(row2==null) 
      break; 
     outputCurrent.println(row2); 
    } 
    outputCurrent.close(); 
    inputCurrent.close(); 
} 

}

+0

Это намного лучше. Предложение - как прокомментировал ajb, 'if (row1.contains (...' блоки, окружающие ваши вызовы 'replaceAll', действительно не нужны, потому что' replaceAll' просто вернет исходную строку без изменений, если она не найдет любые соответствия. –

+0

@Lena - метод replaceAll предназначен для замены соответствующего шаблона, такого как '" aaabaaaabaababaaaaab ".replaceAll (" a + "," a ")' дает вам '' ababababab''. Если вы хотите заменить только string, то вы должны использовать метод 'repalce()'. Он называется плохо, но 'replace()' и 'replaceAll()' оба заменят все вхождения, за исключением того, что первый ищет соответствующую строку, в то время как последний ищет соответствующий шаблон , –