2016-11-15 4 views
0

Я пытаюсь искать слова в текстовом файле и заменять все верхние и нижние символы. Проблема в том, что когда я использую функцию replace All, используя регулярное выражение, я получаю синтаксическую ошибку. Я пробовал разные тактики, но это не работает. Какие-нибудь советы? Я думаю, что, возможно, мне следует создать заменяющий метод All, который мне нужно будет вызывать, но я действительно не вижу его использования.поиск слов в текстовом файле в java

public static void main() throws FileNotFoundException { 

    ArrayList<String> inputContents = new ArrayList<>(); 

    Scanner inFile = 
    new Scanner(new FileReader("H:\\csc8001\\data.txt")); 

    while(inFile.hasNextLine()) 
    { 
     String line = inFile.nextLine(); 
     inputContents.add(inFile.nextLine()); 

    } 
    inFile.close(); 

    ArrayList<String> dictionary = new ArrayList<>(); 


    for(int i= 0; i <inputContents.size(); i++) 
    { 
     String newLine = inFile.nextLine(); 
     newLine = newLine(i).replaceAll("[^A-Za-z0-9]"); 
     dictionary.add(inFile.nextLine()); 

    } 


    // PrintWriter outFile = 
    // new PrintWriter("H:\\csc8001\\results.txt"); 

} 
+0

Пожалуйста, правильно отформатируйте свой код. –

+0

. Посмотрите на метод replaceAll String: https://www.tutorialspoint.com/java/java_string_replaceall.htm – RamanSB

ответ

3

Существует ошибка компиляции на этой линии:

newLine = newLine(i).replaceAll("[^A-Za-z0-9]"); 

replaceAll Поскольку принимает 2 параметра: регулярное выражение и замены. (. А так как newLine(i) это нонсенс) Это должно быть ближе к тому, что вам нужно:

newLine = newLine.replaceAll("[^A-Za-z0-9]+", " "); 

То есть, заменить непустые последовательности символов, не являющихся [A-Za-z0-9] пробелом.

Чтобы преобразовать все прописные буквы в строчные буквы, проще и лучше использовать toLowerCase.

В коде также много других проблем. Например, некоторые строки на входе будут пропущены из-за некоторых неуместных вызовов inFile.nextLine. Кроме того, входной файл закрывается после первого цикла, но второй пытается его использовать, что не имеет смысла.

С этими и несколько других вопросов, убирали, это должно быть ближе к тому, что вы хотите:

Scanner inFile = new Scanner(new FileReader("H:\\csc8001\\data.txt")); 

List<String> inputContents = new ArrayList<>(); 
while (inFile.hasNextLine()) { 
    inputContents.add(inFile.nextLine()); 
} 
inFile.close(); 

List<String> dictionary = new ArrayList<>(); 
for (String line : inputContents) { 
    dictionary.add(line.replaceAll("[^A-Za-z0-9]+", " ").toLowerCase()); 
} 

Если вы хотите добавить слова в словарь вместо линий, также необходимо разделить линии на пространствах. Один простой способ достичь этого:

dictionary.addAll(Arrays.asList(line.replaceAll("[^A-Za-z0-9]+", " ").toLowerCase().split(" "))); 
+0

, поэтому, на ваш взгляд, лучше создать другой метод, функциональная функция которого будет использоваться в основном методе для выполнения запрошенная задача: заменить ли этоAll или toLowerCase? – Jazztheman

+0

Я был осмотром достопримечательностей, чтобы просто заменить 'replaceAll' на' toLowerCase'. Я добавил больше объяснений, если это поможет, см. Мое обновление. – janos

+0

Большое вам спасибо за помощь. У меня только один последний вопрос, как вам удалось удалить все не слова из списка inputContents? как убедиться, что нет восклицательных знаков и других персонажей? – Jazztheman