2016-11-09 3 views
0

На данный момент мой код редактирует только слова, если они разделены возвратом. Если я разделяю слова через пробел или запятую, они не заменяются.Как отредактировать определенное слово в текстовом документе?

E.G. Если у меня есть «эй» на одной линии и «привет» на следующем. Мой код может заменить оба из них, если я захочу. Однако, если у меня есть «эй» на одной строке и «привет» разделяется запятой рядом с «эй», мой код тоже не заменяет.

Цель моего кода - заменить слова в файле .CSV, но если мой код не может заменить слова, разделенные запятой или пробелом, то это не сработает.

Вот мой код, который активируется при нажатии кнопки:

try{ 
    // Input the file location into Path variable 'p' 
    Path p = Paths.get("test test.txt"); 
    //Path p = Paths.get("tiger.csv"); 

    //Read the whole file to a ArrayList 
    List<String> fileContent = new ArrayList<>(Files.readAllLines(p)); 

    //Converting user input from editSerialField to a string 
    String strSerial = editSerialField.getText(); 
    //Converting user input from editLocationField to a string 
    String strLocation = editLocationField.getText(); 

    //This structure looks for a duplicate in the text file, if so, replaces it with the user input from editLocationField. 
    for (int i = 0; i < fileContent.size(); i++) 
    { 
     if (fileContent.get(i).equals(strSerial)) 
     { 
      fileContent.set(i, strLocation); 
      break; 
     } 

    } 

    // write the new String with the replaced line OVER the same file 
    Files.write(p, fileContent); 

    }catch(IOException e) 
    { 
     e.printStackTrace(); 
    } 

Как я могу редактировать слова через запятую или пробел? Кроме того, это было бы аккуратно, если бы я мог заменить слова независимо от того, являются ли они прописными или строчными буквами, как это осуществить?

спасибо.

+0

Кажется, что вы используете только целые строки/против известных строк, тогда как вы говорите, что пытаетесь заменить отдельные слова. Вам нужно будет заглянуть в линию и, конечно же, выбрать слова, чтобы заменить отдельные слова. Рассмотрите возможность использования класса «Scanner» или анализатора CSV вместо того, чтобы выполнять манипуляции с строкой самостоятельно ... – BadZen

+0

Когда я использую «Сканер», он не может быть преобразован в «путь». 'List fileContent = new ArrayList <> (Files.readAllLines (s));' while 's' is 'Scanner s = new Scanner (" test test.txt ");'. Должен ли я использовать Scanner по-другому, чтобы прочитать весь файл? – juiceb0xk

+0

Функция сканера заменяет «Files.readAllLines()», «Сканер» выполняет чтение. См. Https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html – BadZen

ответ

0

В вашем коде, где у вас есть следующее:

//Read the whole file to a ArrayList 
List<String> fileContent = new ArrayList<>(Files.readAllLines(p)); 

Я предполагаю, что вы на самом деле имел в виду это:

//Read the whole file to a ArrayList 
List<String> fileContent = Files.readAllLines(p); 

Затем, когда цикл по каждой строке просто проверить и посмотреть, если каждый из них содержит что-то, что вас интересует. Вы также можете просто разделить каждую свою строку на слова, а затем проверить каждое слово с помощью java 8 потоков.

+0

Нет, он абсолютно не может. Это заменит/подстроки внутри слов/а также целые слова. – BadZen

+0

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

1

Engage регулярное выражение:

fileContent.replaceAll(s -> s.replaceAll("(?i)\\b" + strSerial + "\\b", strLocation)); 

Добавление \b, что означает «граница слова», к обоим концам поискового термина означает только целые слова будут заменены.

Добавление (?i) означает «игнорировать регистр».

Смежные вопросы