2016-04-11 33 views
0

ile karşılaştırmaya çalışıyorum Bir dizenin herhangi bir satırında bir dizgi oluşup oluşmayacağını ve varsa bir satırda yazdırılmaya çalışıyorum.Dosya verilerini String

Şu anda konsolda, if ve else ifadelerimden çıktılar yazdırıyor. Nerede yanlış gittiğimi anlayamıyorum. Her iki değerde de true veya false istiyorum. Bu benim konsolda elde ediyoruz: Açıkçası ek kod vardır

public void checkString() { 
    int line = 0; 
    //fileString = false; 
    while (scanner.hasNext()) { 
     String str = scanner.nextLine(); 
     System.out.println(line + ": " + str); 
     line++; 
     if (str.contains(string)) { 
      System.out.println("File String," + string); 
      fileString = true; 
     } else { 
      System.out.println("String False"); 
     } 
    } 
} 

, bu şimdiye kafayı am bölümdür:

0: - 
String False 
1: File String, ThisString 
String False 

İşte benim yöntemidir. Okumakta olduğu belirli bir dosyaya giden bir yolu izler. Soruyla ilgili daha fazla bilgi: Kod doğruysa ve false veya else ifadesinde tamamen farklı bir işlem olduğunda bir eylem gerçekleştirmek istiyorum. Eğer dizeyi içeren satırı bulma konusunda gidebiliriz

+0

Eh, bir döngü içinde ve döngü boyunca ilk kez bir şey yazdırır ve ikinci kez başka bir şey yazdırır. Yani bu yüzden iki çıktı görüyorsun. Döngünün dışında bir şey yazdırmak istediğiniz gibi geliyor, ama sorunuz tamamen belirsiz ve ne başarmak istediğiniz hakkında hiçbir fikrim yok. – ajb

+0

Yaptığım bir dosyayı okumak için kodu almaya çalışıyordum. Sonra her satırın, sınıfımda bildirdiğim bir String değerine göre karşılaştırılmasını istiyorum. Eğer satır benim dizgimi içerirse ya da tam tersi olursa, dizenin dosya içinde olduğunu söylesin, eğer istemiyorsa, bunun olmadığını söylemek istiyorum. Yukarıdaki işlemleri basit bir kodla denedim ve biraz kafam karıştı. –

+0

Bu yüzden, satır dizeyi içeriyorsa, dosyanın dizeyi içerdiğini biliyorsunuz, bu yüzden daha fazla dosyayı okumak zorunda değilsiniz, değil mi? Bir 'break' deyimini kullanabilirsiniz. Diğer yandan, dosyanın tamamını okuyana kadar dosyanın dizeyi içermediğini söyleyemezsiniz. Yani, dosyanın dizeyi içermediğini söyleyen satır, döngüden sonraya kadar yazdırılamaz. – ajb

cevap

2

bir yolu şu şekildedir:

public String lineContaining(String someString) { 
    int lineNumber = 0; 
    while (scanner.hasNext()) { 
     String eachLine = scanner.nextLine(); 
     System.out.println(lineNumber + ": " + eachLine); 
     lineNumber++; 
     if (eachLine.contains(someString)) { 
      System.out.println("Found string " + someString 
        + " in line " + lineNumber + ": " + eachLine); 
      return eachLine; 
     } 
    } 
    return null; 
} 

Bu yöntem her satırın geçeceği (sizin scanner tarafından sağlanır) ve someString içerip içermediğini kontrol edin. Böyle bir çizgi varsa, geri dönecektir (böylece while döngüsünden çıkılıyor); değilse, yöntem null değerini döndürür, yani aradığınızı içeren bir satır yoktu. Bu hatta ihtiyacınız olan her yerden bunu arayabilir, bir satır bulunup bulunmadığını görmek için sonuçta bir null (== null) kontrol gerçekleştirin ve oradan devam edin. Dizeninizin bulunduğu satır numarası gibi daha fazla bilgiye ihtiyacınız varsa, bir dizeye (alt dizenin bulunduğu satır) ve bir tam sayıya (satır numarası) sahip basit bir sarmalayıcı nesnesi oluşturmanızı öneririm; Daha sonra yönteminiz, bu sarıcıyı String yerine iade edebilir. yinelenen doğasını vurgular ve eachLine için str (Smalltalk'tan bir alışkanlık, ben lineNumber için line değişken yeniden adlandırdık

Not (bir dize değil, bir int gibi bence, line ses olur) değişken).