Wprowadzanie aż do znaku końca linii[ENTER]

Wprowadzanie aż do znaku końca linii[ENTER]
OL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Witam !
Mam problem z następującym zadaniem (to są moje początki programowania):
Napisz program tablica znaków, który pobiera od użytkownika pojedyncze znaki (maksymalnie 30), aż do wprowadzenia znaku końca linii [ENTER]. Następnie wypisuje łańcuch znakowy składający się wyłącznie z małych i dużych liter. Wszystkie inne znaki są pomijane.

Jak na razie napisałem dopiero sam początek (podrzucę poniżej kod) i szczerze mówiąc stoję w miejscu, ponieważ nie wiem jak rozwiązać problem uwzględnienia tego entera, tzn myślałem aby w pętli for dodać if zapisanego w postaci

Kopiuj
for(tab[i]!="/n") 

ale nie umiem tego na razie rozwinąć i brakuje mi wiedzy.

Kopiuj
Scanner r=new Scanner(System.in);
            String[] tab=new String[30];
            System.out.println("Podaj znaki, zakończ ciąg enterem");
            
            for(int i=0;i<tab.length;i++){
                System.out.println();
                tab[i]= r.nextLine();
                
            } 

Prosiłbym o sugestię jak rozwinąć mój kod, albo jak się inaczej wziąć za to zadanie (myślałem o while, ale nie mam pomysłu jak to wykonać).
Proszę o wyrozumiałość.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Nowa linia nie jest wczytywana do ciągu wynikowego z nextLine().
Najprościej po prostu sprawdzaj dane, aż nie napotkasz pustej linii.

  • Rejestracja: dni
  • Ostatnio: dni
1

Ja bym tak pobrał

Kopiuj
try {System.out.println(scanner.next(Pattern.compile(".{1,30}")));}catch(Exception e) {System.err.println("Max 30. Jeszcze raz");}
  • Rejestracja: dni
  • Ostatnio: dni
0

Jak co, nie podejmuje sie tłumaczenia

SK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
1

Dodatkowo, jeżeli ciekawi Cię, jakbym ja rozwiązał całe zadanie:

Kopiuj
try {
   System.out.println(
     new Scanner(System.in).useDelimiter("\n").next(".{1,30}").replaceAll("[^a-z|A-Z]", "")
   );
}catch(Exception e) { System.err.println("max 30"); }

Chyba że "...który pobiera od użytkownika pojedyncze znaki...", znaczy enter po każdym znaku, a sprawdza to Tobie komputer, w takim wypadku

Kopiuj
final Scanner scanner = new Scanner(System.in);
String string = "", tmp;
        
while(string.length() < 30 && !(tmp = scanner.nextLine()).isEmpty()) 
    string += tmp.charAt(0);

System.out.println(string.replaceAll("[^a-z|A-Z]", ""));

Zobacz co się stanie, gdy zamienisz kolejność w wyr. warunk pętli, lub operator koniunkcji, zamienisz z leniwego na zachłanny.
Lubię takie śniadanka xD

OL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Dzięki wielkie za kod i propozycje, zaraz go przeanalizuję i zobaczę jak działa.
Dowiedziałem się też jak postępować z tym enterem (w moim prymitywnym kodzie), gdyby komuś się to na przyszłość przydało:

Kopiuj
for(int i=0;i<tab.length;i++){
                System.out.println();
                tab[i]= r.nextLine();
                if(tab[i].equals("")){
                break;
                }
SK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
1

Jeśli chodzi o drugą część zadania, to polecam zająć się tematem wyrażenia regularne.
IMO, najlepszy, najbardziej przystępny materiał o tym:
http://fatcat.ftj.agh.edu.pl/~bogdan/unix.pdf
Ciebie interesuje do momentu predefiniowane klasy znaków - rozszerzenia perla

Jeżeli nie czujesz się na siłach, to możesz sobie zdefiniować jakiś łańcuch znaków, które mają być dopuszczalne lub nie, i potem sprawdzać czy któryś ze znaków zawiera się w tym łańcuchu, np

Kopiuj
final String mask = "0123456789ad"; // znaki które mogą występować
final String array = "ankjasdn 234o123 jn1o2"; // jakis tam łanuch 

// teraz wypisujemy z array tylko te znaki, które zawiera mask
for(char c: array.toCharArray())
    System.out.print(mask.contains(c + "")? c : ""); // jeżeli mask zawiera c, to wypisz c
OL
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Okej, jeszcze dzisiaj się temu przyjrzę, dzięki za rady !

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.