2016-04-14 64 views
2

Giriş dosyasını değiştirmek için bir program yazıyorum. Sonra yeni bir satır başlamalı mı? . ve ! ama bunu anlayamıyorum. Her yeni hat, benim de aldığımı sandığım bir Büyük harfle başlamalı. Ayrıca sahip olduğuma inandığım gereksiz alanları da yok etmeli.Belirli bir süre, soru işareti ve ünlem işareti sonrasında yeni bir satıra nasıl başlarım?

Örneğin: merhaba? barmen. bir içki alabilir miyim lütfen viski.

Output should be: 
Hello? 
Bartender. 
Can I have a drink!whiskey please. 

Sadece bir Arkasında boşluk bu operatörler sonra yeni bir satır yapmalıdır. Eğer alan yoksa yeni hat yapmayacaktır.

import java.util.Scanner; 
import java.io.*; 


public class TextFileProcessorDemo 
{ 
public static void main(String[] args) 
{ 
    String fileName, answer; 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Test Input File:"); 
    fileName = keyboard.nextLine(); 
    File file = new File(fileName); 

    PrintWriter outputStream = null; 

    try 
    { 
     outputStream = new PrintWriter(file); 
    } 
    catch(FileNotFoundException e) 
    { 
     System.out.println("Error opening file" + file); 
     System.exit(0); 
    } 

    System.out.println("Enter a line of text:"); 
    String line = keyboard.nextLine(); 
    outputStream.println(line); 
    outputStream.close(); 
    System.out.println("This line was written to:" + " " + file); 
    System.out.println(" "); 

    TextFileProcessor.textFile(); 


} 

} 

İkinci Sınıf

import java.io.*; 
import java.util.Scanner; 


public class TextFileProcessor 
{ 
public static void textFile() 
{ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Test Input File:"); 
    String inputFile = keyboard.next(); 
    System.out.print("Output File:"); 
    String outputFile = keyboard.next(); 

    try 
    { 
     BufferedReader inputStream = new BufferedReader(new FileReader(inputFile)); 
     PrintWriter outputStream = new PrintWriter(new FileOutputStream(outputFile)); 
     String line = inputStream.readLine(); 

     line = line.replaceAll("\\s+", " ").trim(); 
     line = line.substring(0,1).toUpperCase() + line.substring(1); 
     //This is where I would like to add code 

     while(line != null) 
     { 
      outputStream.println(line); 
      System.out.println(line); 
      line = inputStream.readLine(); 
     } 

     inputStream.close(); 
     outputStream.close(); 
    } 

    catch(FileNotFoundException e) 
    { 
     System.out.println("File" + inputFile + " not found"); 
    } 
    catch(IOException e) 
    { 
     System.out.println("Error reading from file" + inputFile); 
    } 
} 
} 

cevap

0

Basit bir regex yeterli olacaktır:

class Ideone 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     for(String s:"hello? bartender. can I have a drink!whiskey please.".replaceAll("(\\W)(\\s+)", "$1\n").split("\n")) 
      System.out.println(s.substring(0, 1).toUpperCase()+s.substring(1)); 
    } 
} 

Çıktı:

Hello? 
Bartender. 
Can I have a drink!whiskey please. 

https://ideone.com/Zo2N7Q

+0

Çalıştı! Çok teşekkür ederim! Şu an sahip olduğum tek sorun, yeni satırların Büyük harfle başlamaması. Onu tamir ettim sandım. Herhangi bir fikir? –

+0

@ nedst3r – ritesht93

+0

'ü onayladım Görüşler için teşekkür ederiz. Yine de kodum üzerinde çalışmam için döngü alamıyorum. Neden olduğundan emin değilim. Birçok hata alıyorum –

0

bu sorunu çözmek istiyorsunuz?

if(line.endsWith("! ") || line.endsWith("? ") || line.endsWith(". ")) { 
    line = line + '\n'; 
} 
+0

Bu sorunu çözer mi? Karakterler her zaman çizginin sonunda olmadığından, OP'nin aradığı sonucu elde edemezdi. – kstandell

+0

Çalışmıyordu ... ama yanıt için teşekkürler.Ben bile böyle bir şey düşünmedim bile –

+0

'line = line.replace ("? ","? \ N "). Değiştirin ("! ","! \ N "). Değiştirin (". ",". \ n ") Bu sürüm, satırınızda herhangi bir yere yeni satırlar ekler. – Selim

0

Ne istediğini elde etmek için bir regex bir "yakalama grubu" kullanabilirsiniz .

line.replaceAll("(\\?)|(\\!)|(\\.)", "$0\n"); 

Güncelleme: her satırın ilk karakteri yararlanmak için nasıl hakkındaki yorumunuzu ilgili olarak

, sen Character sınıfında toUpperCase yöntemi kullanabilirsiniz.

line = Character.toUpperCase(line.charAt(0)) + line.substring(1); 

Not:

Eğer girdi okurken Sonra Scanner

try (Scanner keyboard = new Scanner(System.in)) { 
    ... 
} 

a denemek için-with-kaynaklar bloğu kullanmayı düşünmelisiniz Java 1.7 veya üzeri kullanıyorsanız Kullanıcıya, dosyanıza yazmadan önce doğru formatta işlem yapabilirsiniz. Örneğin ... gibi okuma ve java.nio pakette engellenmeyen Files sınıfını kullanarak daha iyi dosyalarından yazma gibi

System.out.println("Enter a line of text:"); 
String[] lines = keyboard.nextLine().replaceAll("(\\?)|(\\!)|(\\.)", "$0\n").split("\n"); 

    // Replace the first character of each line with an uppercase character 
    for (int i = 0; i < lines.length; i++) { 
     lines[i] = Character.toUpperCase(lines[i].charAt(0)) + lines[i].substring(1); 
    } 

    Path path = Paths.get(fileName); 
    Files.write(path, Arrays.asList(lines), Charset.defaultCharset()); 

    System.out.println("This line was written to:" + " " + path.toString()); 
    System.out.println(" "); 

şey yapabiliriz. Aşağıdaki gibi basit;

Path path = Paths.get(fileName); 
Files.write(path, Arrays.asList(lines), Charset.defaultCharset()); 

Ardından dosyayı okumak için sadece readAllLines yöntemi kullanabilirsiniz.

List<String> lines = Files.readAllLines(path); 

    for (String line : lines) { 
     System.out.println(line); 
    }