2013-07-10 4 views
0

Я пытаюсь добавить любые строки в текстовом файле, который содержит заданный набор строк. Я создал тестовый файл, в который я помещал одну из этих строк. Мой код должен печатать любую строку в текстовом файле, содержащем одну из этих строк, в той же строке, что и предыдущая строка в текстовом файле. Вот мой код:String.contains регистрируется как! String.contains

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 
public class AppendIfFromFileScanner { 
public static void main(String args[]) { 
    File file = new File("C:\\Users\\frencke\\workspace\\Testing Stuff\\Append Tetsing\\file3.txt"); 
    ArrayList<String> lines = new ArrayList<String>(); 
    String delima = "\\s+\\s+\\s+\\s+\\s+&\\s+"; 
    String delimb = "\\s+\\s+\\s+\\s+\\s+\\+\\s+"; 
    String delimc = "\\s+\\s+\\s+\\s+\\s+z\\s+"; 
    String delimd = "\\s+\\s+\\s+\\s+\\s+1\\s+"; 
    String delime = "\\s+\\s+\\s+\\s+\\s+2\\s+"; 
    String delimf = "\\s+\\s+\\s+\\s+\\s+3\\s+"; 
    String delimg = "\\s+\\s+\\s+\\s+\\s+4\\s+"; 
    String delimh = "\\s+\\s+\\s+\\s+\\s+5\\s+"; 
    String delimi = "\\s+\\s+\\s+\\s+\\s+6\\s+"; 
    String delimj = "\\s+\\s+\\s+\\s+\\s+7\\s+"; 
    String delimk = "\\s+\\s+\\s+\\s+\\s+8\\s+"; 
    String deliml = "\\s+\\s+\\s+\\s+\\s+9\\s+"; 
    String delimm = "\\s+\\s+\\s+\\s+\\s+a\\s+"; 
    String delimn = "\\s+\\s+\\s+\\s+\\s+b\\s+"; 
    String delimo = "\\s+\\s+\\s+\\s+\\s+c\\s+"; 
    String delimp = "\\s+\\s+\\s+\\s+\\s+d\\s+"; 
    String delimq = "\\s+\\s+\\s+\\s+\\s+e\\s+"; 
    String delimr = "\\s+\\s+\\s+\\s+\\s+f\\s+"; 
    try { 
     Scanner scanner = new Scanner(file); 
     while (scanner.hasNextLine()) { 
      lines.add(scanner.nextLine());} 
for(int i=0; i<lines.size(); i++){ 
    for(String s=null; i<lines.size(); i++){ 
     s = lines.get(i); 
     if(!s.contains(delima)|| 
      !s.contains(delimb)|| 
      !s.contains(delimc)|| 
      !s.contains(delimd)|| 
      !s.contains(delime)|| 
      !s.contains(delimf)|| 
      !s.contains(delimg)|| 
      !s.contains(delimh)|| 
      !s.contains(delimi)|| 
      !s.contains(delimj)|| 
      !s.contains(delimk)|| 
      !s.contains(deliml)|| 
      !s.contains(delimm)|| 
      !s.contains(delimn)|| 
      !s.contains(delimo)|| 
      !s.contains(delimp)|| 
      !s.contains(delimq)|| 
      !s.contains(delimr)) 
     System.out.print("\r\n" + s); 
     else if(s.contains(delima)|| 
       s.contains(delimb)|| 
       s.contains(delimc)|| 
       s.contains(delimd)|| 
       s.contains(delime)|| 
       s.contains(delimf)|| 
       s.contains(delimg)|| 
       s.contains(delimh)|| 
       s.contains(delimi)|| 
       s.contains(delimj)|| 
       s.contains(delimk)|| 
       s.contains(deliml)|| 
       s.contains(delimm)|| 
       s.contains(delimn)|| 
       s.contains(delimo)|| 
       s.contains(delimp)|| 
       s.contains(delimq)|| 
       s.contains(delimr)) 
     System.out.print(s);} 
} 
}catch (FileNotFoundException e) { 
System.out.println("Cannot find file."); 
} 
} 
} 

Содержимое моего текстового файла:

first line 
text  & append this line 

Так в принципе, я знаю, что мой текстовый файл имеет одну из этих строк (в данном случае, delima) в нем , Тем не менее, мой выпуск:

first line 
text  & append this line 

Это не должно произойти. Выход я хочу это:

first line text  & append this line 

Кто-нибудь знает, почему это интерпретировать вторую строку моего текстового файла, как если бы он не содержит delima, даже если он явно делает? Любая помощь будет оценена по достоинству. Я довольно уверен, что проблема связана с моим утверждением if, но я, очевидно, не эксперт.

+5

'содержит()' ** не ** принимает регулярное выражение! – jlordo

+0

Это так просто? Благодаря! EDIT: Я попытался заменить регулярное выражение на регулярные пять пробелов &, и другое пространство, и это не изменило мой вывод. Означает ли это, что единственный способ сделать это - добавить каждую строку с амперсандом? –

+2

Это немного похоже на проблему [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). В чем основная проблема, которую вы пытаетесь решить? –

ответ

2

Метод String.contains() соответствует точной строке, а не регулярному выражению.

Вместо этого вы можете попробовать использовать String.matches(). Вам может потребоваться настроить свой шаблон для получения аналогичного поведения на (см. this page для некоторых примеров).

+0

Если я использую String.matches(), не будет ли это только добавлять строки, соответствующие точности? Или есть способ подстановить его? –

+1

@ItsanAlias ​​Вы просматривали страницу, с которой я связан? Он показывает сопоставление подстановочных знаков (следовательно, я думал, что это разумная вещь для ссылки). –

+0

Я просто сделал, спасибо. Теперь я установил String delima в ". * \\ s + \\ s + \\ s + \\ s + \\ s + & \\ s +. *", Но он по-прежнему не дает мне совпадения. Любая идея почему? –

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