Java egyperces – Nagy Kezdőbetűs Szavak megoldása

Csak akkor olvass tovább, ha a Nagy Kezdőbetűs Szavak feladatot megoldottad, vagy nem sikerült megoldani.

Az alap feladatot a fenti linken megtalálod. Kétféle megoldást is megadok, sőt, a karakterek kis-nagybetűs átalakítására is adok külön kétféle megoldást. A feladat megoldását NetBeans project formában innen letöltheted.

/**
 *
 * @author http://webotlet.hu
 */
package webotlet_nagykezdobetus;

public class Webotlet_NagyKezdobetus
{

  public static void main( String[] args )
  {
    String s = "ez egy mondat lenne, melynek minden "+
               "szavat nagy kezdobetusse kellene alakitani.";
    String nagyS;
// 1. megoldas
    System.out.println( "\n1. megoldas" );
    System.out.println( "Eredeti:\n"+s );
    char[] tomb = s.toCharArray();
    
    tomb[0] = Character.toUpperCase(tomb[0]);
// vagy
//  tomb[0] = (char)(tomb[0]-32);
    for( int i = 1; i < tomb.length; i++ )
    {
      if( tomb[i] == ' ' )
      {
        tomb[i+1] = Character.toUpperCase(tomb[i+1]);
// vagy
//      tomb[i+1] = (char)(tomb[i+1]-32);
      }
    }
    nagyS = new String(tomb);
    System.out.println( "Nagykezdo:\n"+nagyS );

// 2. megoldas
    System.out.println( "\n2. megoldas" );
    System.out.println( "Eredeti:\n"+s );

    StringBuilder sb = new StringBuilder(s);
    sb.setCharAt(0, Character.toUpperCase( sb.charAt(0)));
// vagy
//  sb.setCharAt(0, (char)(sb.charAt(0)-32));
    
    for( int i = 1; i < sb.length(); i++ )
    {
      if( sb.charAt(i) == ' ' )
      {
        sb.setCharAt(i+1, Character.toUpperCase( sb.charAt(i+1)));
// vagy
//      sb.setCharAt(i+1, (char)(sb.charAt(i+1)-32));
      }
    }
    System.out.println( "Nagykezdo:\n"+sb );
  }
}

6 Replies to “Java egyperces – Nagy Kezdőbetűs Szavak megoldása”

  1. Kicsit túlkomplikáltad.

    Így rövidebb és egyszerűbb:
    String s1 = “Ez egy mondat lenne, melynek minden szavat nagy kezdobetusse kellene alakitani.”;
    char[] st1 = s1.toCharArray();
    String sz;
    for (int i = 0; i < st1.length – 1; i++) {
    if (st1[i] == ' ') {
    sz = String.valueOf(st1[i+1]).toUpperCase();
    st1[i+1] = sz.charAt(0);
    }
    }
    String s2 = String.valueOf(st1);
    System.out.println(s2);

    • Nem egyszerűbb. Te ezt csinálod:
      1. eredeti String -> karaktertömb
      2. kezdőbetű karakterek -> String-gé
      3. kezdőbetű Stringek -> nagybetűssé
      4. nagybetűs Stringek -> karakterré
      5. karaktertömb -> String-gé

      Nálam:
      1. eredeti String -> karaktertömb
      2. kezdőbetű karakterek -> nagybetűs karakterek
      3. karaktertömb -> String-gé

      Te csinálsz egy karakter -> String -> karakter konvertálást feleslegesen (2, 4-es lépések) A karakterek közvetlenül nagybetűssé alakíthatóak, nem kell Stringet készíteni belőlük, az már önmagában is időigényes.

  2. esetleg ez nem egyszerűbb?(csak most tanulom, szóval lehet nincs igazam)

    String szoveg = “itt most minden szonak nagy betuvel kene kezdodnie”;

    String[]szavak = szoveg.split(” “);
    String mondat;

    for (int i = 0; i < szavak.length; i++) {
    System.out.print(mondat = szavak[i].substring(0, 1).toUpperCase()+szavak[i].substring(1)+" ");
    }

    • Nem tudom, hogy mennyire lehet itt ítéletet hirdetni, hogy ez a jobb vagy az a jobb. A lényeg egyelőre egy működő megoldás. Amit te írtál, első olvasatra helyes eredményt ír ki, de most egy erősnek ható kritika jön, nem rosszindulat mondatja velem:

      A megoldásodban kifejezetten rossz és felesleges, hogy a kiíratáson belül értékadást is használsz. A kiíratás feladata csak annyi, hogy megjelenítsen valamit a képernyőn, nem lehet más dolga, nincs értelme oda más feladatot berakni.

      A mondat változót (aminek ott adsz értéket) ráadásul nem is használod semmire azon kívül, hogy mindig csak az aktuális szó nagybetűs változata lesz benne, ami kiírsz, és a következő körben már másik szót raksz bele.

      A megoldás kimenet szerint helyes lesz, de az említett értékadás nem jó szokás. Ha mindenképpen szeretnéd a mondatot összegyűjteni, akkor a kiíratás előtt tárold el a nagybetűs szót egy változóba, írd ki, és utána fűzd hozzá a mondathoz.

      Egyszerűnek szerintem nem egyszerűbb a közvetlen karakter átalakításos módszernél, mert így egy szót két részre kell vágnod (két másik String-re), amiből az egyiket alakítod csupa nagybetűsre (az egyetlen kezdőbetűt), majd a két String-et újra összefűzöd. Ez biztosan időigényesebb művelet, mint csak 1-1 karaktert direkt módon átalakítani.

      Ettől függetlenül (pláne, hogy nemrég kezdted), mindenképpen jó, hogy meg tudtad oldani a feladatot, csak így tovább 🙂

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük

*

Ez a weboldal az Akismet szolgáltatását használja a spam kiszűrésére. Tudjunk meg többet arról, hogyan dolgozzák fel a hozzászólásunk adatait..