JSPACE - Spacje - pl.spoj.com

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:

Input:
Dzisiaj jest czwartek,
A jutro bedzie piatek.

Output:
DzisiajJestCzwartek,
AJutroBedziePiatek.

Moje rozwiązanie jakie wklejam to:

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?

0

a jakiego typu masz błąd?

0

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

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.

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"

0

spróbuj używać nowe zabawki javy 8

        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);
0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1