Stringben lévő szavak megfordítása

Címkék
Stringben lévő szavak megfordítása
2022-02-05T18:47:47+01:00
2022-02-05T20:11:44+01:00
2022-10-15T21:20:34+02:00
DavinchiDani
Adott egy string. Ebben a stringben lévő szavakat kellene kiírni fordítva, tehát nem az egészet kellene megfordítani, hanem csak a benne lévő szavakat. 

PL:

Bemenet: "yge őttek moráh"
Kimenet: "egy kettő három"



String s = ""; Scanner szoveg = new Scanner(System.in); s = szoveg.nextLine(); for(int i = 0; i < s.length(); i++){ if(s.charAt(i) == ' ') { for (int j = i - 1; j >= 0; j--) { System.out.print(s.charAt(j)); } } }
Mutasd a teljes hozzászólást!
Nem a leghatékonyabb, de a legkönnyebben érthető megoldás három lépésre bontani a feladatot:

1. Szétvágás szavakra: String.split() metódus.
2. Az egyes szavak megfordítása: házi feladat, nem nehéz
3. A szavak összefűzése: String.join(), vagy ha bonyolítani akarod, akkor StringJoiner.
Mutasd a teljes hozzászólást!

  • 1) Split szóköz karakter mentén.
    2) Foreach ciklusban megfordítod a szavakat. Ha egy adott szó mondatközi írásjelre végződik, azt meghagyod a legvégén.
    3) StringBuildert (még mindig a Foreach cikluson belül) vagy List+Join-t használva (Foreach után) összefűzöd a szavakat szóköz karakter mentén.
    Mutasd a teljes hozzászólást!
  • Nem a leghatékonyabb, de a legkönnyebben érthető megoldás három lépésre bontani a feladatot:

    1. Szétvágás szavakra: String.split() metódus.
    2. Az egyes szavak megfordítása: házi feladat, nem nehéz
    3. A szavak összefűzése: String.join(), vagy ha bonyolítani akarod, akkor StringJoiner.
    Mutasd a teljes hozzászólást!
  • De a splittel eltünnek a szóközök, vagy ezt rosszul tudom, és van olyan eset, amikor pl szóközzel kezdődik, vagy esetleg két szóköz van két szó között.
    Mutasd a teljes hozzászólást!
  • De mi van akkor, ha két szóközt használok valahol, és annak meg kellene maradnia, a splittel nem tűnnek el a szóközök?
    Mutasd a teljes hozzászólást!
  • De a splittel eltünnek a szóközök

    De ezzel semmi baj nincs, hiszen szóköz mentén vágjuk szét az inputot, és az eredményeket szóköz mentén illesszük össze. Egyébként a két szóköz egymás után nyelvtanilag is helytelen, de úgy tudom, a Java alapból kiszűri az üres elemeket az eredménytömbből.

    Szerk: nem szűri ki. Szóval még azzal sem kell foglalkoznod, mert visszakapod a dupla szóközeidet. Próbáld ki:

    for (String i : "Hello World".split(" ")) { System.out.println(i); } System.out.println(String.join(" ", "Hello World".split(" ")));
    Mutasd a teljes hozzászólást!
  • H.Lilla már megadta a választ. Ha szeretnéd bonyolítani (és automatikusan lekezelni nem csak a szóközöket, de mindenféle írásjelet), akkor nekimehetsz reguláris kifejezésekkel. Ha úgy definiáljuk a szót, hogy "egy vagy több egymás után írt betű", akkor valami ilyesmi lenne:

    Pattern wordPattern = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS); StringBuilder outputBuilder = new StringBuilder(); Matcher m = wordPattern.matcher(inputString); while (m.find()) { String reversed = reverse(m.group()); // a reverse() megírása házi feladat m.appendReplacement(outputBuilder, reversed); } m.appendTail(outputBuilder); String outputString = outputBuilder.toString();
    Persze ebbe is bele lehet kötni, e szerint a kód szerint az "innen-onnan" az két szó, de lehet az az elvárás is hogy egy szónak számítson. Ízlés szerint tovább bonyolítható, attól függően hogy a megbízó (itt: a tanárod) mibe köt bele
    Mutasd a teljes hozzászólást!
  • <off>
    Aztán lehet AI-t is csinálni, hogy a Facebook-on sok magyar ember ilyen jellegű írásaiból kiszedje a szavakat:

    mostez aztan valyon ,mit jel ent!!!
    </off>
    Mutasd a teljes hozzászólást!
  • Hoppá, úgy néz ki kicsit lemaradtam a Matcher újdonságairól. 9-es Java óta tömörebben is lehet:

    Pattern wordPattern = Pattern.compile("\\w+", Pattern.UNICODE_CHARACTER_CLASS); String outputString = wordPattern.matcher(inputString).replaceAll(match -> reverse(match.group()));
    Mutasd a teljes hozzászólást!
Címkék
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd