2017-03-14 1 views
2

Ich versuche, alle Zeichenfolgen, die einen Großbuchstaben aus der Eingabetextdatei enthalten, in der Ausgabekonsole in grüner Farbe erscheinen zu lassen. Z. B. enthält die Texteingabedatei "Ich bin es gewohnt, auf Englisch zu sprechen". Die Ausgabe sollte der gesamte Satz aus der Eingabetextdatei "Ich spreche auf Englisch" sein. mit den Saiten "I'm" und "English" in grüner Farbe. Aber ich kann nur die Zeichenfolgen "I'm" und "English" in grüner Farbe anzeigen, ohne den ganzen Satz auf der Konsole anzuzeigen.Lassen Sie bestimmte Teile einer Zeichenfolge in der Konsolenausgabe farbig erscheinen

Kann jemand helfen, dies zu lösen? Mein Code:

public static void main(String[] args) throws FileNotFoundException { 

    Scanner sc = new Scanner(new File("Testing.txt")); 

    while(sc.hasNext()){ 
     String line = sc.nextLine(); 
     String arr [] = line.split(" "); 

     StringBuilder out = new StringBuilder(); 
     for (int i = 0; i < arr.length; i++) { 
      if (Character.isUpperCase(arr[i].charAt(0))) { 
       out.append(arr[i]); 
      } 
     } 

     if (out.length() > 1) { 
      out.setLength(out.length() -2); 
     } 

     System.out.println ("\u001B[32m " + out); 
    } 
} 
+2

vielleicht hilft es http://stackoverflow.com/questions/5762491/how-to-print-color-in-console-using-system-out-println? –

+0

Ich schaffe es, diese Großbuchstaben in Farbe auszudrucken, aber ich möchte den ganzen Satz nur mit diesen Großbuchstaben in Farbe ausdrucken ... –

Antwort

2

Versuchen Sie so etwas wie dieses aus:

public static void main(String[] args) throws FileNotFoundException { 
    Scanner sc = new Scanner(new File("Testing.txt")); 

    while(sc.hasNext()){ 
     String line = sc.nextLine(); 
     String arr [] = line.split(" "); 

     StringBuilder out = new StringBuilder(); 
     for (int i = 0; i < arr.length; i++) { 
      if (Character.isUpperCase(arr[i].charAt(0))) { 
       out.append("\u001B[32m").append(arr[i]).append(" "); 
      } else { 
       out.append("\u001b[0m").append(arr[i]).append(" "); 
      } 
     } 

     System.out.println (out); 
    } 
} 

Die Idee ist, mit dem ersten Großbuchstaben nicht nur die Worte zu speichern, aber alle Wörter und verwenden \u001b[0m Escape-Sequenz Formatierung zurücksetzen für die anderen Wörter.

+0

Oh, jetzt hab ich es !!! Danke für deine Hilfe! –

2

Wenn Sie mit ANSI-Farben kolorieren, sollten Sie die Farben zurücksetzen, sobald Sie mit dem farbigen Teil der Zeichenfolge fertig sind, oder die gesamte Zeichenfolge wird dieselbe Farbe haben.

Im folgende Beispiel wird eine colorizeString Methode, die die grüne Farbe auf die übergebenen String setzt und setzt die Farbe danach (Sequenz "\u001B[0m"):

public static void main(final String[] args) throws FileNotFoundException { 

    Scanner sc = new Scanner(new File("Testing.txt")); 


    while (sc.hasNext()) { 
     String line = sc.nextLine(); 
     String arr[] = line.split(" "); 

     StringBuilder out = new StringBuilder(); 
     for (String element : arr) { 
      if (Character.isUpperCase(element.charAt(0))) { 
       colorizeString(out, element); 
      } 
      else{ 
       out.append(element); 
      } 

      // add the previously removed space 
      out.append(" "); 
     } 

     System.out.println(out); 
    } 
} 

private static void colorizeString(final StringBuilder builder, final String str) { 

    builder.append("\u001B[32m");// GREEN foreground 
    builder.append(str); 
    builder.append("\u001B[0m");// Reset colors 

} 

auch das Thema von Roma Khomyshyn erwähnt lesen: How to print color in console using System.out.println?

+0

Ja, Sie haben Recht! Ich denke nie an Farben für andere Texte zurücksetzen, jetzt habe ich es. Danke für deine Hilfe! –

+0

Editiert und modifiziert Die 'colorizeString' Methode und ihr Aufruf, um das Erzeugen mehrerer 'StringBuilder' Objekte zu vermeiden. – Berger

Verwandte Themen