JSPACE - Spacje - pl.spoj.com

JSPACE - Spacje - pl.spoj.com
12
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:2
0

Hej,
mam problem nie wiem gdzie tu może być błąd od 2 dni stoję w miejscu. Uczę się rozwiązujączadania z spoj.com aktualnie JSPACE - Spacje - treść zadania poniżej.

SPACE - Spacje
W celu zaoszczędzenia ilości znaków w krótkich wiadomościach tekstowych (SMS) nie pisze się spacji, a każdy wyraz rozpoczyna się wielką literą. Twoim zadaniem jest otrzymany tekst przerobić zgodnie z powyższym trendem.

Input
Na wejściu znajduje się dowolny tekst bez polskich znaków.

Output:
Tekst wprowadzony z wejścia, ale bez spacji. Ponadto każdy wyraz poprzedzony na wejściu spacją zaczyna się wielką literą.

Przykład:

Kopiuj
Input:
Dzisiaj jest czwartek,
A jutro bedzie piatek.

Output:
DzisiajJestCzwartek,
AJutroBedziePiatek.

Moje rozwiązanie jakie wklejam to:

Kopiuj
import java.util.*;
import java.lang.*;
import java.util.Scanner;

class Main {
	public static void main (String[] args) throws java.lang.Exception {
        
        Scanner input = new Scanner(System.in);
        try {
            do {
                sms(input.nextLine());
            } while (true);
        } catch (Exception e) {
            return;
        }
    }

    public static void sms(String linia) {
        StringBuffer stringBuffer = new StringBuffer();
        char znak;
        char tmp = 97 ;
        int j = 0;

        for(int i = 0 ; i < linia.length() ; i++) {
            znak = linia.charAt(i);

            if(tmp == ' ') {
                if(znak >= 97 && znak <= 122) {
                    znak -= 32;
                    stringBuffer.insert(j,znak);
                    j++;
                } else {
                    stringBuffer.insert(j,znak);
                    j++;
                }
            } else if (znak == ' ') {
                j = j;
            } else {
                stringBuffer.insert(j,znak);
                j++;
            }
            tmp = znak;
        }
        System.out.println(stringBuffer);
    }
}

Jakieś wskazówki?

R1
  • Rejestracja:około 10 lat
  • Ostatnio:około 5 lat
  • Postów:208
0

a jakiego typu masz błąd?

bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
0

Źle czytasz, Scanner może być zbyt wolny. Jeśli jest wystarczająco szybki, to powinieneś czytać tak:

Kopiuj
while(input.hasNextLine()){
    sms(input.nextLine());
}

Jeśli problemem jest czas, to warto też zastąpić metodę insert metodą append i pozbyć się zmiennej j.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 2x, ostatnio: bogdans
12
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 8 lat
  • Postów:2
0

Dzięki za zainteresowanie. Chodziło o to, że programik nie przeszedł testów na stronie pl.spoj.com i już błąd został znaleziony.

Mianowicie jak pojawiało się wiecej niż 1 spacja program pomijał tylko jedną a powinien wszystkie.

Czyli po wpisaniu:
"test test" powinien być wynik "testTest" a niestety był "test Test"

R3
  • Rejestracja:ponad 11 lat
  • Ostatnio:3 dni
  • Postów:419
0

spróbuj używać nowe zabawki javy 8

Kopiuj
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        br.lines()            
        .map(line -> Stream.of(line.split("\\s+")).map(w -> w.substring(0, 1).toUpperCase() + w.substring(1)).collect(Collectors.joining("")))        
        .forEach(System.out::println);
bogdans
Eleganckie, ale nie wiadomo czy poprawne. Zgodnie ze sformułowaniem zadania na SPOJ-u jest niepoprawne - zamienia również pierwszą literę na dużą, a ona nie jest po spacji. Wg komentarzy, tak ma działać.
W4
  • Rejestracja:ponad 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:7
0

Zamiast magicznych liczb możesz wykorzystać metody z klasy java.lang.Character

edytowany 1x, ostatnio: ww421

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.